2014-05-13 3 views
2

아주 좋지 않았다. 지금까지단어의 Regex lookbehind 위치

내 정규식 :

(?<!not\s)(?<!n't\s)(nice|friendly|excelent|comfortable|easy access|good|clean|beautiful) 
난 단지 단어 (좋은, 친절한 ...이 문장에서 ...) 문장이 포함되지 않은 경우 단어를 일치시킬

: "없습니다"또는 "아닙니다"(일명 아니 었습니다.) A.k.a 긍정적 인 문장.

그러나이 정규식은 같은 문장을 위해 작동합니다

The thing was very not nice. 

어떻게 단어가 "없습니다"또는 "하지"내 형용사 전에 어떤 위치에없는 경우 확인 lookbehind 쓰고?

^(?!.*(?:not|n't)).*\K(nice|friendly|excellent|comfortable|easy access|good|clean|beautiful) 

(?!...) 경우 실패합니다

+0

을 나는 정규 표현식에에 부정적인 lookbehinds 만 (NO'+'또는'*') 잘 정의 된 길이 될 수 있다고 생각 것입니다 당신은 너무 가능한 모든 단어를 나열해야합니다. –

답변

3

당신은 어떤 not 아니면 어디 문자열 n't\K이 부분을 던져 원하지 않는이없는 확인하기 위해 앞서 부정적인 모양을 사용할 수 있습니다 그 안에 무엇이 일치합니까, (?:not|n't)은 비 캡처 그룹입니다.

매우 간단한 수표입니다. This is nice but not prettynice과 일치하지 않습니다. 심층적 인 구문 이해를 추가하려면 깊이 파헤쳐 야합니다.

+0

+1 -'\ K'을 깜박했습니다! –

+0

감사합니다. Robin. 이것은 작동하는 것 같습니다! 투쟁의 2 시간 후 Excelent :) Thx – EnchanterIO

+0

@ Trk : 도와 줘서 기뻐. 기록 ("버그를 찾을 수 없다"는?)에 나는 당신의 교대로'우수 '에'l'을 추가했습니다 :) – Robin

0

Lookbehinds는 고정 길이 여야합니다.

작업을 쉽게 분할 할 수 있습니다. 먼저 문장에 "nice", "friendly"등이 포함되어 있는지 확인한 다음 별도의 조건부에서 부정이 없는지 확인하십시오.

이 쉽게 너무 이중 부정을 감지 할 것 : P

+0

예 Niet. 나는이 아이디어도 가지고 있었다. 그러나 나는 2 시간 동안 그것에 관해 매우 흥미로웠다. .. – EnchanterIO