Ruby Regex不匹配

时间:2011-08-07 07:36:33

标签: ruby regex

我正在运行Ruby 1.9.2p290和Rails 3.1.0.rc5。当我运行这个正则表达式时,它匹配所有内容:

files = Dir.glob("#{File.dirname(video.path)}/*")
files.each do |f|
  File.delete(f) unless File.extname(f) =~ /[.flv|.gif]/
end

我错过了什么吗?

2 个答案:

答案 0 :(得分:5)

要确保只匹配确切的扩展名,请使用

File.delete(f) unless File.extname(f) =~ /^\.(?:flv|gif)$/

<强>解释

^     # Start of string
\.    # Match .
(?:   # Match the following: Either...
 flv  # flv
|     # or
 gif  # gif
)     # End of alternation
$     # End of string

答案 1 :(得分:3)

我认为你想要匹配扩展名“.flv”或“.gif”。因此,您可以使用以下正则表达式:

/^(\.flv|\.gif)$/

你的正则表达式定义了一个匹配的字符集([...]),这适用于包含任何字符'f','g','i','l','v','|的扩展名。 ','。'。由于任何带扩展名的文件在扩展名中都有一个点,因此这将匹配任何扩展名的任何文件。