Regular Expressions
원자 그룹핑
수색…
소개
일반 비 캡처 그룹은 엔진이 그룹을 다시 입력하고 서로 다른 항목 (예 : 다른 대체 항목 또는 한정 기호 사용시 더 적은 문자와 일치)을 일치 시키려고 시도합니다.
원자력 그룹은 역 추적이 금지된다는 점에서 일반 비 포획 그룹과 다르다. 그룹이 종료되면 모든 역 추적 정보가 삭제되므로 대체 일치를 시도 할 수 없습니다.
비고
소유량 한정 기호 는 엔진이 토큰이나 그룹을 역 추적 할 수 없다는 점에서 원자 그룹과 같이 작동합니다.
다음은 일부 기능은 다른 기능보다 빠르지 만 기능면에서 동일합니다.
a*+abc
(?>a*)abc
(?:a+)*+abc
(?:a)*+abc
(?:a*)*+abc
(?:a*)++abc
그룹화 (?>)
원자 그룹 사용
원자 집단은 열린 괄호 뒤에 ?>
가있는 형식 (?>...)
을가집니다.
다음 샘플 텍스트를 고려하십시오.
ABC
정규식은 ABC
의 A
앞에있는 텍스트의 위치 0에서 시작하여 일치를 시도합니다.
대소 문자를 구분 발현이 경우 (?>a*)abc
를 사용 하였다는 (?>a*)
1을 일치합니다 떠나, 문자 A
BC
일치시킬 나머지 텍스트로 (?>a*)
그룹이 종료되고 일치하지 않는 나머지 텍스트에서 abc
가 시도됩니다.
엔진이 원자 그룹으로 되돌아 갈 수 없으므로 현재 패스가 실패합니다. 엔진은 텍스트의 다음 위치로 이동합니다.이 위치는 ABC
다음 A
와 B
에있는 위치 1에 있습니다.
regex (?>a*)abc
를 다시 시도하고 (?>a*)
A
0 번 일치시킵니다.
BC
일치시킬 나머지 텍스트로 (?>a*)
그룹이 종료되고 abc
가 시도되면 실패합니다.
다시 엔진은 원자 그룹으로 되돌아 갈 수 없으므로 현재 패스가 실패합니다. 정규 표현식은 텍스트의 모든 위치가 다 소모 될 때까지 계속 실패합니다.
비 원자력 그룹 사용
일반 비 캡처 그룹은 열려있는 괄호 뒤에 ?:
가있는 형식 (?:...)
이 있습니다.
동일한 샘플 텍스트가 주어 지지만 대신 대 / 소문자를 구분하지 않는 식 (?:a*)abc
사용하면 역 추적이 허용되므로 일치가 발생합니다.
처음에 (?:a*)
는 텍스트에서 문자 A
를 소비합니다.
ABC
퇴거
BC
일치시킬 나머지 텍스트로 (?:a*)
그룹이 종료되고 일치하지 않는 나머지 텍스트에서 abc
가 시도됩니다.
엔진은에 백 트럭 (?:a*)
그룹을 1 적은 수의 문자를 일치 시키려고 시도 대신 1 일치의 문자를,는 0과 일치를 시도 A
A
문자를, 그리고 (?:a*)
그룹이 종료됩니다. 이 나뭇잎
ABC
일치시킬 나머지 텍스트로 정규식 abc
는 이제 나머지 텍스트와 성공적으로 일치시킬 수 있습니다.
기타 예제 텍스트
원자와 비 원자 그룹 (다시, 대소 문자를 구별하지 않음)이있는이 샘플 텍스트를 살펴보십시오.
AAAABC
정규식은 AAAABC
의 첫 번째 A
앞에있는 텍스트의 위치 0에서 시작하여 일치를 시도합니다.
원자 그룹 (?>a*)abc
를 사용하는 패턴은 위의 원자 ABC
예제와 거의 동일하게 작동하여 일치 할 수 없습니다 . A
문자 4 개 모두가 먼저 (?>a*)
와 일치합니다 (?>a*)
BC
가 일치 할 나머지 텍스트), abc
는 해당 텍스트와 일치 할 수 없습니다. 이 그룹은 다시 입력 할 수 없습니다, 그래서 경기가 실패합니다.
비 원자 그룹 (?:a*)abc
를 사용하는 패턴은 위의 비 원자 ABC
예제와 유사하게 일치 할 수 있습니다. A
문자 4 개 모두가 먼저 (?:a*)
와 일치합니다 (?:a*)
BC
를 나머지 텍스트로 사용), abc
는 해당 텍스트와 일치 할 수 없습니다. 이 그룹은 다시 입력 할 수 있습니다, 그래서 한 적은 A
시도 : 3 개 A
문자 대신 (떠나 4의 일치 ABC
맞게 나머지 텍스트로)와 abc
성공적으로 텍스트와 일치 할 수 있습니다.