我正在運行Ruby 1.9.2p290和Rails 3.1.0.rc5。當我運行這個正則表達式它匹配一切:Ruby正則表達式不匹配
files = Dir.glob("#{File.dirname(video.path)}/*")
files.each do |f|
File.delete(f) unless File.extname(f) =~ /[.flv|.gif]/
end
我錯過了什麼嗎?
我正在運行Ruby 1.9.2p290和Rails 3.1.0.rc5。當我運行這個正則表達式它匹配一切:Ruby正則表達式不匹配
files = Dir.glob("#{File.dirname(video.path)}/*")
files.each do |f|
File.delete(f) unless File.extname(f) =~ /[.flv|.gif]/
end
我錯過了什麼嗎?
爲了確保只有準確的擴展匹配時,使用
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
正是!非常感謝。 – Morten
我想你想匹配擴展名「.flv」或「.gif」。因此可以使用以下正則表達式:
/^(\.flv|\.gif)$/
你的正則表達式定義的匹配字符集([...]
),並且這給出真正含有任何字符「F」,「G」,「I」的擴展,「升','v','|','。'。由於任何帶有擴展名的文件在擴展名中都有一個點,這將匹配任何擴展名的文件。
'/ [FLV | .gif要點] /'指「一個字符出' ','f','l','v','|','g'或'i'「。 –