Ruby正则表达式不匹配
我正在运行Ruby 1.9.2p290和Rails 3.1.0.rc5。当我运行此正则表达式时,它匹配所有内容:Ruby正则表达式不匹配,ruby,regex,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 我遗漏了什么吗?我想您需要匹配extension.flv或.gif。因此,您可以使用以下正则表达式: /^(\.flv|\.g
files = Dir.glob("#{File.dirname(video.path)}/*")
files.each do |f|
File.delete(f) unless File.extname(f) =~ /[.flv|.gif]/
end
我遗漏了什么吗?我想您需要匹配extension.flv或.gif。因此,您可以使用以下正则表达式:
/^(\.flv|\.gif)$/
您的正则表达式定义了一个匹配的字符集[…],这对于包含任何字符“f”、“g”、“i”、“l”、“v”、“|”的扩展名都是真的。由于任何具有扩展名的文件的扩展名中都有一个点,因此这将匹配任何具有任何扩展名的文件。我认为您希望匹配扩展名.flv或.gif。因此,您可以使用以下正则表达式:
/^(\.flv|\.gif)$/
您的正则表达式定义了一个匹配的字符集[…],这对于包含任何字符“f”、“g”、“i”、“l”、“v”、“|”的扩展名都是真的。由于任何具有扩展名的文件的扩展名中都有一个点,这将匹配任何具有任何扩展名的文件。要确保仅匹配准确的扩展名,请使用
File.delete(f) unless File.extname(f) =~ /^\.(?:flv|gif)$/
说明:
要确保仅匹配准确的扩展名,请使用
File.delete(f) unless File.extname(f) =~ /^\.(?:flv|gif)$/
说明:
/[.flv |.gif]/表示从、.f、l、v、|、g或i中取出一个字符。/[.flv |.gif]/表示从、.f、l、v、|、g或i中取出一个字符。