Development Tip

정규식 "독립 캡처 그룹"이란 무엇입니까?

yourdevel 2021. 1. 8. 22:30
반응형

정규식 "독립 캡처 그룹"이란 무엇입니까?


Java 6 Pattern 문서에서 :

특수 구조 (비 캡처)

(?:X )   X , 비 캡처 그룹으로

(?>X )   X , 독립적 인 비 캡처 그룹

사이 (?:X)(?>X)의 차이점은 무엇입니까? 이 맥락에서 독립 이란 무엇을 의미합니까?


이는 그룹화가 원자 적임을 의미하며 일치하는 그룹에 대한 역 추적 정보를 버립니다. 그래서,이 표현은 소유격입니다. 정규식이 전체적으로 성공할 수있는 유일한 방법이더라도 백 오프되지 않습니다. 일치를 보장하기 위해 정규식의 다른 요소와 역 추적을 통해 협력하지 않는다는 점에서 "독립적"입니다.


가있는 경우 foo(?>(co)*)co일치하지 않습니다. 이것이 언제 유용 할 것인지에 대한 실제적인 예가 있다고 확신합니다. O'Reilly의 책을보십시오.


이 튜토리얼은 "독립, 비-캡처 그룹"또는 "원자 그룹"이 정확히 무엇인지 설명 한다고 생각 합니다.

정규 표현식 a(bc|b)c(캡처 그룹)은 abccabc 와 일치 합니다. 정규식 a(?>bc|b)c(원자 그룹)은 abcc 와 일치 하지만 abc 와는 일치 하지 않습니다 .

에 적용하면 ABC , 모두 정규 표현식에 일치됩니다 a, BC , 다음 문자열의 끝에서 일치되지 않습니다. 여기서 그들의 길은 갈라진다. 캡처 그룹있는 정규식 은 대체에 대한 역 추적 위치를 기억했습니다. 이 그룹은 그 경기를 포기 다음과 일치하는 B일치 C를 . 일치를 찾았습니다!bccbc

그러나 원자 그룹 이있는 정규식 bc은 일치 한 후 원자 그룹 에서 나갔습니다. 이 시점에서 그룹 내부의 토큰에 대한 모든 역 추적 위치가 삭제됩니다. 이 예에서는 b문자열의 두 번째 위치에서 시도하는 대체 옵션 이 삭제됩니다. 결과적으로 c실패하면 정규식 엔진에 시도 할 대안이 없습니다.


(?>X[?/*/+])와 동일합니다 (?:X)[?/*/+]+.

참조 URL : https://stackoverflow.com/questions/50524/what-is-a-regex-independent-capturing-group

반응형