2012-07-10 4 views
3

Similarquestionshavebeen 질문했지만 아무도이 특정 질문에 대답하지 않습니다.한 단어 만 포함하고 다른 단어는 포함하지 않는 행과 일치하는 정규식을 만들 수 있습니까?

foo 
bar 
foo bar 
bar foo 
foo bar foo 
bar foo bar 

는 단어 foo를 포함 않지만 단어 bar를 포함하지 않는 경우에만 라인에 맞게 정규 표현식을 사용할 수 있습니다 :

이 대표적인 텍스트를 감안할 때? 이 원하는 정규 표현식 위의 텍스트에서 실행 된 경우

, 그것은 단지 초래에서 :

foo 

답변

9

다음은이 작업을 수행 할 수있는 매우 간단한 방법입니다.

빔 버전 :

^\(.*\<bar\>\)\@!.*\<foo\>.* 
+1

+1 - 이것은 내 솔루션보다 낫다. –

+0

누구나 내 영웅이되고이 정규식을 'vim'이 수락 할 수있는 형태로 제시하고 싶습니까? –

+1

@CoryKlein - Vim 버전으로 내 대답을 편집했습니다. –

0

예. 둘러보기를 사용하십시오.

^(?!.*\bbar\b).*\bfoo\b.* 

설명 :

^    # starting at beginning of the string 
(?!    # fail if (negative lookahead) 
    .*\bbar\b  # the word 'bar' exists anywhere in the string 
)    # end negative lookahead 
.*\bfoo\b.*  # match the line with the word 'foo' anywhere in the string 

Rubular 나 : 정규식에서 http://www.rubular.com/r/pLeqGQUXbj

\bword boundary입니다

/^.*(?<!\bbar\b.*)\bfoo\b(?!.*\bar\b).*$/ 
관련 문제