2013-02-21 10 views
-1

부정적인 lookahead가 작동하는 데 문제가 있습니다.Regex negative lookahead trouble

파일에서 "경고"또는 "오류"를 언급하는 모든 행을 포착하고 싶지만 해당 행에 "clearmake"가 언급되어 있으면 해당 행을 포착하고 싶습니다.

그래서이 잡을해야합니다

This is a warning : bla bla 

만하지이 :

clearmake.exe: This is a warning : bla bla 

나는 부정적 예측과 주위 연주했지만, 나는 그것이 동작하지 않습니다

(?!clearmake).*$ 

이상형? 감사!

+3

어떻게 당신이 당신의 발현을 언급하지 않고 "경고"또는 "오류"일치한다고 가정 할 문자열의 시작에 대한 anchor입니다 ? –

+0

확실히 문자열 조작 작업 :) –

+0

왜 정규식을 사용합니까? –

답변

4

당신은 정규식이 작업을 수행 할 수 있습니다 시도 할 수 있습니다,하지만 당신은 그 고급 정규식 이해가 필요합니다. 아마도 2 if() 또는 논리 연산자와이 작업에 대한 일반 문자열 검색을 사용하면 읽기/이해가 더 쉬울 것입니다.

대체 답변을 얻을 수있는 질문에는 항상 언어 태그을 사용해야합니다.

정규식 솔루션에 대해 설명합니다. 행 단위로 파일을 읽고 있다고 가정합니다.

  1. 당신은 warning또는error가 ==> 교대 \b(?:error|warning)\b를 사용하여 일치합니다.

  2. 그러나 clearmake ==이>^(?!.*\bclearmake\b)

그래서 당신의 정규식은 다음과 같습니다 포함하는 행되어 있지 않을 경우 :

^(?!.*\bclearmake\b).*\b(?:error|warning)\b 

here on Regexr

+0

완벽한! "여기 정규식을 사용하지 마십시오"에 대한 – user1758367

+0

+1 감사합니다. –

0

^(?!.*\bclearmake\b).*(warning|error).*$ 
    --------------- 
     | 
     |->match further only if the string doesn't have clearmake