2016-10-06 5 views
2

pqr을 정규식을 사용하여 문자열에서 제외하고 싶습니다. 내가 현재 가지고있는정규식 제외 어법을 사용하여 정확한 문자열 제외

이 올바르게 abc/pqr/xyz 거부 ​​

abc\/(?!.*pqr).*\/xyz 

이지만, 그것은 또한 내가 일치시킬 abc/pqrst/xyz을 거부합니다.

완전한 단어 인 경우 pqr 만 제외하고 pqrst과 같이 긴 단어의 하위 문자열 인 경우는 제외합니다.

+1

전체 단어'pqr'? 주변에'\ b'를 추가하십시오. 'abc \/(?!. * \ bpqr \ b). * \/xyz'. https://regex101.com/r/HjJBBH/1 –

+0

감사 Wiktor를 참조하십시오. 그것의 지금 일하는 :) –

+0

[Regex - 단일 단어를 제외하는 방법?] 가능한 복제본 (http://stackoverflow.com/questions/7820930/regex-how-to-exclude-single-word) – revo

답변

0

당신은 word boundaries 룩어 내부입니다 pqr로 사용할 수 있습니다 :

abc\/(?!.*\bpqr\b).*\/xyz 
      ^^ ^^ 

regex demo를 참조하십시오. 단어 경계를 사용하지 않으면 pqr으로 인해 정규 표현식이 끊어지며 단어 경계를 추가 할 때 일치하지 않는 단어 만 pqr이 전체 단어로 표시됩니다.

대안은 특정 상황에서 pqr과 일치하는 것입니다

abc\/(?!(?:.*\/)?pqr\/).*\/xyz 

another demo를 참조하십시오. 여기에서 (?!(?:.*\/)?pqr\/)abc/ 이후 또는 abc 이후 0+ 임의의 문자가 마지막으로 /까지 이어지며 다른 문자가 / 인 경우에만 일치합니다. 다른 모든 상황에서는 일치하는 것입니다.

참고 :이 전체 단어 xyz 일치하도록 한 후 같은 방법은 xyz에 적용되어야한다 (당신은 \b를 추가 할 수 있습니다

NOTE2이 :. abc\/(?!(?:(?!\/xyz).)*\bpqr\b).*\/xyz를 사용 xyz 전에 표시 pqr을 요구하려면

+0

질문을 자주 중복으로 닫습니다. 수십억 번 전에 물어 본이 질문에 왜 대답 했습니까? – revo

+0

단어 경계가 유일한 해결책이 아니기 때문에. 질문은 실제로 단어 경계에 관한 것이 아닙니다. 비난하기 전에주의 깊게 읽으십시오. 또한 여기에 "\ b'"를 사용하는 것보다 더 말할 것이 있습니다. –

+0

정규 표현식이'\ * * '대신'. *'를 사용한다고 가정하면 유효한 값이'pqr'과'\ W'의 어떤 것으로 시작될 가능성이 없습니까? – Rawling

0

을 수행합니다. 또한

abc\/(?!.*pqr\/).*\/xyz 

: 간단한 검사는 당신이 그 시점에서 pqr/이없는 것을 볼 수있을 것이다 (?!.*.*을 입력하면 abc/defpqr/xyz을 허용하지 않습니다. 그게 니가 원하는거야?

관련 문제