2011-08-07 57 views
1

我正在運行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 

我錯過了什麼嗎?

+0

'/ [FLV | .gif要點] /'指「一個字符出' ','f','l','v','|','g'或'i'「。 –

回答

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 
+0

正是!非常感謝。 – Morten

3

我想你想匹配擴展名「.flv」或「.gif」。因此可以使用以下正則表達式:

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

你的正則表達式定義的匹配字符集([...]),並且這給出真正含有任何字符「F」,「G」,「I」的擴展,「升','v','|','。'。由於任何帶有擴展名的文件在擴展名中都有一個點,這將匹配任何擴展名的文件。