2013-09-05 2 views
2

"포함"및 "포함하지 않음"에 대한 정규 표현식이 필요합니다. 는 일반적으로 그냥 쓰는 것 :정규식 - 하나 이상의 "포함하지 않음"/ "포함"

가 포함 : ((* WORD_A *)..) $ 및 가 포함되어 있지 않습니다 (.^((?! WORD_A)) *) $

혼자 사용하면 정상적으로 작동하지만 sth을 감지 할 수있는 무언가를 쓰고 싶습니다. 같은 "포함 단어 A와 말씀 B"(관련이없는 순서!) 및 는 "단어 A를 포함,하지만 워드 B). 나는 기본적으로 사용자가 다음과 같은 성명을 발표 할 수 원하는

은"단어로 시작 A, 단어 B를 포함하지만 C가 아니거나 D로 끝나고 프로그램에서 true/false를 반환합니다. 가장 좋은 방법은 정규 표현식을 추가하는 것입니다. 귀하의 예를 들어

+0

을 한꺼번에. – Jonathon

+1

미리보기 사용에 대한 두 번째 대답은 다음과 같이 도움이 될 수 있습니다. http://stackoverflow.com/questions/469913/regular-expressions-is-there-an-operator – mpellegr

+0

감사합니다. 거대한 것이고 성능을 지켜 볼 필요가 있기 때문에 목록을 반복하는 것은 옵션이 아닙니다.하지만 어쨌든 고마워요. –

답변

4

,이 같은 lookahead assertions을 사용하십시오 :

^WORD_A(?=.*WORD_B)(?!.*WORD_C).*WORD_D$ 

원하는 경우 조건을 더 추가 할 수 있습니다 (다른 미리보기 추가). 예를 들어, WORD_A 및 WORD_B를 포함하고 WORD_C도 WORD_D 포함하지 않는 임의의 문자열과 일치 할 경우 : 당신이 각 하나를 수행하려고 단어의 목록을 통해 단지 루프에해야하고,하지 않을 생각

^(?=.*WORD_A)(?=.*WORD_B)(?!.*WORD_C)(?!.*WORD_D) 
+0

거의 완벽하게 작동하지만 이유는 무엇입니까? (? =. * an) (?!. *) 이것은 "정보입니다"와 일치합니까? 부정적인 전망은이를 부정하지 않아야합니까? * 편집 : 앵커와 함께 작동합니다. 대단히 고마워요, 제 생각에이게 효과가 있다고 생각합니다. :) –

+0

참고. 두 개의 "단어"가 병합되는 경우가 있습니다. 예를 들어 "then"으로 시작하고 "end"로 끝나고 "thend"를 검색합니다. 그때부터 끝까지 끝나지 만'^ WORD_A. * WORD_D $'는 실패합니다. – Jonathon

+1

@JonathonWisnoski :이 경우에는 (내 일반적인 두 번째 예에서와 같이) 선견자를 통해 모든 것을 할 수 있습니다. 첫 번째 예제는 플로리안 (Florian)이 질문 한 특정 사용 사례를 의미합니다. –

관련 문제