Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby正则表达式不匹配_Ruby_Regex - Fatal编程技术网

Ruby正则表达式不匹配

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

我正在运行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|\.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中取出一个字符。