수색…


비고

NB 소유 지정자 에뮬레이션

소유량 지정자의 기본 사용

Possessive quantifiers는 많은 regex flavors에있는 또 다른 양의 한정자 클래스로서, 주어진 토큰에 대해 역 추적을 효과적으로 비활성화 할 수 있습니다. 이렇게하면 성능을 향상시킬 수있을뿐만 아니라 특정 경우 일치를 방지 할 수 있습니다.

소유량 한정자의 클래스는 다음과 같이 한정사 뒤에 + 추가하여 지연 또는 욕심쟁이 수량 자와 구별 될 수 있습니다.

한정 기호 욕심쟁이 게으른 소유
0 이상 * *? *+
하나 이상 + +? ++
0 또는 1 ? ?? ?+

예를 들어 문자열 "abc"d 에서 작동하는 ".*"".*+" 의 두 패턴을 생각해보십시오. 두 경우 모두 " 문자열의 시작 부분과 일치하지만 이후에는 두 패턴이 다른 동작 및 결과를 갖습니다.

욕심 한정 기호는 문자열의 나머지 후루룩 소리 내며 먹기 것 abc"d .이 패턴과 일치하지 않기 때문에, 그 다음 역 추적하고 떨어질 것이다 d 정량 포함 떠나 abc" . 이것은 여전히 ​​패턴과 일치하지 않기 때문에 한정 기호는 " abc 만을 포함하는 채로 남겨두고 " 이것은 패턴과 일치합니다 ( " 한정 기호가 아니라 리터럴에 의해 매치 됨). 정규식은 성공을보고합니다.

소유량 한정 기호는 문자열의 나머지 부분을 slurp하지만, 탐욕스러운 한정 기호와는 달리 되돌릴 수 없습니다. abc"d 의 내용은 나머지 일치 패턴을 허용하지 않으므로 정규 표현식이 중지되고 일치하지 않는 것으로보고합니다.

소유 양화기는 백 트랙킹을 수행하지 않기 때문에 길거나 복잡한 패턴에서 상당한 성능 향상을 가져올 수 있습니다. 그러나 한정자가 내부적으로 어떻게, 정확하게, 어떻게 작동하는지 알지 못하는 경우 위의 그림과 같이 위험 할 수 있습니다.



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