2013-09-16 3 views
1

전에 나타나지 않으면이 Regex (Live) :정규식 일치하는 단어는 내가 가진 다른 단어

^((?!when|how|where).*?(ARE|WANNA|DO).*\?)$ 

그리고이 세 문장 :

Hey are we out after the rain? 
Where are we meeting? 
Dan where are we gonna meet? 

내 정규식 1과 3 일치 만 1 일치해야합니다

내 기본 규칙은 단어 when|how|where 중 하나가 단어 ARE|WANNA|DO 앞에 표시 될 수 없다는 것입니다.

아이디어가 있으십니까?

답변

2

다음과 같은 작업을해야합니다 : ((?!foo).)*처럼 반복 그룹 내부의 부정적 예측을 퍼팅

^((?!when|how|where).)*?(ARE|WANNA|DO).*\?$ 

각 문자가 일치하기 전에 내다가 선택되도록, 그래서 이것은 모든 문자의 수와 일치하지만 경우에 중지 할 것 foo이 발생했습니다.

예 : http://rubular.com/r/0cw8eaFMXB

1

이 대신 사용해보십시오 :

^((?:(?!when|how|where).)*?(ARE|WANNA|DO).*\?)$ 
    ^^^     ^

이 그룹이 일치하기 전에 각 .을 '확인'각 점 앞서 when|how|where가 없는지 확인합니다.

관련 문제