我正在运行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
我错过了什么吗?
答案 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','|的扩展名。 ','。'。由于任何带扩展名的文件在扩展名中都有一个点,因此这将匹配任何扩展名的任何文件。