수색…


소개

일반 비 캡처 그룹은 엔진이 그룹을 다시 입력하고 서로 다른 항목 (예 : 다른 대체 항목 또는 한정 기호 사용시 더 적은 문자와 일치)을 일치 시키려고 시도합니다.

원자력 그룹은 역 추적이 금지된다는 점에서 일반 비 포획 그룹과 다르다. 그룹이 종료되면 모든 역 추적 정보가 삭제되므로 대체 일치를 시도 할 수 없습니다.

비고

소유량 한정 기호 는 엔진이 토큰이나 그룹을 역 추적 할 수 없다는 점에서 원자 그룹과 같이 작동합니다.

다음은 일부 기능은 다른 기능보다 빠르지 만 기능면에서 동일합니다.

a*+abc
(?>a*)abc
(?:a+)*+abc
(?:a)*+abc
(?:a*)*+abc
(?:a*)++abc

그룹화 (?>)

원자 그룹 사용

원자 집단은 열린 괄호 뒤에 ?> 가있는 형식 (?>...) 을가집니다.

다음 샘플 텍스트를 고려하십시오.

ABC

정규식은 ABCA 앞에있는 텍스트의 위치 0에서 시작하여 일치를 시도합니다.

대소 문자를 구분 발현이 경우 (?>a*)abc 를 사용 하였다는 (?>a*) 1을 일치합니다 떠나, 문자 A

BC

일치시킬 나머지 텍스트로 (?>a*) 그룹이 종료되고 일치하지 않는 나머지 텍스트에서 abc 가 시도됩니다.

엔진이 원자 그룹으로 되돌아 갈 수 없으므로 현재 패스가 실패합니다. 엔진은 텍스트의 다음 위치로 이동합니다.이 위치는 ABC 다음 AB 에있는 위치 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 성공적으로 텍스트와 일치 할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow