정규식 "독립 캡처 그룹"이란 무엇입니까?
Java 6 Pattern 문서에서 :
특수 구조 (비 캡처)
(?:
X)
X , 비 캡처 그룹으로…
(?>
X)
X , 독립적 인 비 캡처 그룹
사이 (?:X)
와 (?>X)
의 차이점은 무엇입니까? 이 맥락에서 독립 이란 무엇을 의미합니까?
이는 그룹화가 원자 적임을 의미하며 일치하는 그룹에 대한 역 추적 정보를 버립니다. 그래서,이 표현은 소유격입니다. 정규식이 전체적으로 성공할 수있는 유일한 방법이더라도 백 오프되지 않습니다. 일치를 보장하기 위해 정규식의 다른 요소와 역 추적을 통해 협력하지 않는다는 점에서 "독립적"입니다.
가있는 경우 foo(?>(co)*)co
일치하지 않습니다. 이것이 언제 유용 할 것인지에 대한 실제적인 예가 있다고 확신합니다. O'Reilly의 책을보십시오.
이 튜토리얼은 "독립, 비-캡처 그룹"또는 "원자 그룹"이 정확히 무엇인지 설명 한다고 생각 합니다.
정규 표현식 a(bc|b)c
(캡처 그룹)은 abcc 및 abc 와 일치 합니다. 정규식 a(?>bc|b)c
(원자 그룹)은 abcc 와 일치 하지만 abc 와는 일치 하지 않습니다 .
에 적용하면 ABC , 모두 정규 표현식에 일치됩니다 a
에 , 에 BC , 다음 문자열의 끝에서 일치되지 않습니다. 여기서 그들의 길은 갈라진다. 캡처 그룹 이 있는 정규식 은 대체에 대한 역 추적 위치를 기억했습니다. 이 그룹은 그 경기를 포기 다음과 일치하는 B 와 일치 C를 . 일치를 찾았습니다!bc
c
b
c
그러나 원자 그룹 이있는 정규식 bc
은 일치 한 후 원자 그룹 에서 나갔습니다. 이 시점에서 그룹 내부의 토큰에 대한 모든 역 추적 위치가 삭제됩니다. 이 예에서는 b
문자열의 두 번째 위치에서 시도하는 대체 옵션 이 삭제됩니다. 결과적으로 c
실패하면 정규식 엔진에 시도 할 대안이 없습니다.
(?>X[?/*/+])
와 동일합니다 (?:X)[?/*/+]+
.
참조 URL : https://stackoverflow.com/questions/50524/what-is-a-regex-independent-capturing-group
'Development Tip' 카테고리의 다른 글
온라인 PHP IDE가 있습니까? (0) | 2021.01.09 |
---|---|
Kotlin에 Java Lombok 접근자가 표시되지 않나요? (0) | 2021.01.08 |
자바 스크립트에서 뒤로 버튼 이벤트를 잡는 방법이 있습니까? (0) | 2021.01.08 |
요소에서 창으로 스크롤 버블 링 방지 (0) | 2021.01.08 |
char와 char [1]의 차이점 (0) | 2021.01.08 |