2011-09-03 2 views
2

나는 성공적인 일치를 가지고있다 :이 정규식을 어떻게 반전시킬 수 있습니까?

/^\/?build\/(.+\.coffee|.+\.sass|.+\.erb)$/ 

이제/build/아래에있는 모든 파일들이 그 확장자 중 하나와 일치하지 않는다. 나는 부정적인 look-ahead로 이것을 할 수 있다고 생각하지만, 제대로 작동하지 않는 것 같습니다.

어떤 생각?

+5

올바른 제어 구조를 사용하지 않는 이유는 'if'대신 'unless'입니까? – Howard

+0

동의하지만, "Guard"를 사용하고있는 보석은 그 일치에 대한 정규식을 기대합니다. 나는 모든 파일에 일치시킬 수있는 그들을 버리고, 그 .. 못생긴 ..하지만. – Samuel

답변

2

/build/아래의 모든 파일을 찾은 경우 해당 확장명 중 하나와 일치하지 않으면 "?!" 예를 들어, 문자열을 제외시켰다하기 :

^\/?build\/(?:(?!\.coffee|\.sass|\.erb).)*$ 
1
extensions = [".coffee",".sass",".erb"] 
Find.find(build_folder) do |file| 
    next unless extensions.include?(File.extname(file)) 
end 

을 또한, 당신이 어떻게 알아?

if some_string =~ /some_regex/ 
    # matched regex 
end 

if some_string !~ /some_regex/ 
    # didn't match regex 
end