2011-08-07 8 views
1

Ruby 1.9.2p290 및 Rails 3.1.0.rc5를 실행하고 있습니다. 이 정규식을 실행하면 다음과 같이 일치합니다.Ruby Regex가 일치하지 않습니다.

files = Dir.glob("#{File.dirname(video.path)}/*") 
files.each do |f| 
    File.delete(f) unless File.extname(f) =~ /[.flv|.gif]/ 
end 

누락 된 항목이 있습니까?

+0

'/ [. FLV | .gif 참고]에서 /'의미 "하나 개의 문자' '''','''','''','''',''''와 같이. –

답변

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', '내가'중 하나를 포함하는 확장에 대한 진정한 제공을 정의하고, 'L : 따라서 다음과 같은 정규 표현식을 사용할 수 있습니다 ','v ','| ','. ' 확장자가있는 파일은 확장자에 점이 있기 때문에 확장자가있는 파일과 일치합니다.

관련 문제