2017-12-20 21 views
3

Regex101 링크 : https://regex101.com/r/MsZy0A/2왜이 정규식 패턴이 일치하지 않습니까?

다음과 같은 정규식 패턴이 있습니다. .++b에 다음 테스트 데이터를 입력하십시오. aaaaaaaacaeb.

내가 이해하지 못하는 것은 "Possessive quantifier"입니다. 나는 그것이 정상적으로 역행하지 않는다는 것을 읽었다. 그러나, 나는 그것이 어떻게해서든지 되돌아 가야한다고 생각하지 않는다? .+은 모든 항목 ("b"포함)과 일치하고 "b"는 "b"와 일치하므로 "b"를 포함하여 최대 두 항목과 일치해야합니다.

누군가가 소유량 한정사의 역할에 대해 설명해 주시겠습니까?

이 질문은 언급 한 것과 중복되는 것이 아니며 다른 답변을 읽은 후에도 이해할 수 없기 때문에이 특정 사례에 대해 묻고 있습니다.

+3

나는 그런 패턴을 본 적이 없지만'(. +) + b'는 잘 작동합니다. '. + b'도 마찬가지입니다. –

+0

왜 +를해야합니까? 두 번째로해야 할 일은 무엇입니까? – Andreas

+6

possessive 수량 한정자가'. ++'를 마지막으로'b '를 포함하여 모든 것을 매칭시키지 않으므로 마지막으로'b'가 일치하지 않습니다 – anubhava

답변

3

++ 한 번에 무제한으로 매치하고 가능한 한 많이 반환합니다. 즉, .++으로 작성하면 최종 b을 포함한 모든 항목과 일치합니다. 따라서 정규 표현식에 b이 추가로 적용되지 않습니다.

소유량 한정 기호를 사용하지 않거나 일치하는 클래스 [^b]++b에서 b을 제거하면이 문제를 해결할 수 있습니다.하지만 먼저 제안 할 것입니다. 소유량 한정어는 거의 항상 불필요합니다.

+2

그래, 문자열 중간에 하나 이상의 'b'가 있으면 어떻게합니까? ** ** [** b] ++ b' **가 제대로 작동 할 것이라고 생각하지 않습니다 * * ...'. + b'을 위해가는 것이 더 좋을까요? – Allan

+1

그가 실제로 알고 싶어하는 것, 실제로 말하고 싶은 것, 내가 말할 수는 없지만, 가장 좋은 해결책은 무엇입니까? – Philipp

+0

그래, 그래서 +1을 투표했습니다 :-) – Allan