Regular Expressions
Lookahead와 Lookbehind
수색…
통사론
- 긍정적 인 선견자 :
(?=pattern)
- 부정적 예측 :
(?!pattern)
- 긍정적 인 표정 :
(?<=pattern)
- 부정적인 lookbehind :
(?<!pattern)
비고
모든 regex 엔진에서 지원되지 않습니다.
또한 많은 정규 표현식 엔진은 lookbehinds 내부의 패턴을 고정 길이 문자열로 제한합니다. 예를 들어, 패턴 (?<=a+)b
는 aaab
의 b
와 일치해야하지만 파이썬에서는 오류가 발생합니다.
캡쳐 그룹은 역 참조를 포함하여 예상대로 작동하고 허용됩니다. 미리보기 / lookbehind 자체는 캡처 그룹이 아닙니다.
기초
긍정적 인 미리보기 (?=123)
는 텍스트가 일치하는 패턴을 포함시키지 않고 주어진 패턴을 따르게합니다. 마찬가지로 긍정적 인 lookbehind (?<=123)
는 텍스트 앞에 주어진 패턴이 있다고 주장합니다. the =
를 !
바꾸십시오 !
주장을 부정합니다.
입력 : 123456
-
123(?=456)
은123
( 양성 예측 )과 일치합니다. -
(?<=123)456
일치456
( 긍정적 인 lookbehind ) -
123(?!456)
실패 ( 부정적 예측 ) -
(?<!123)456
실패 ( 부정보기 )
입력 : 456
-
123(?=456)
실패 -
(?<=123)456
실패 -
123(?!456)
실패 -
(?<!123)456
경기456
lookbehind를 사용하여 결말 테스트하기
Lookbehind는 패턴의 끝에서 특정 방식으로 끝나는 지 여부를 확인하는 데 사용할 수 있습니다.
([az ]+|[AZ ]+)(?<! )
는 후행 공백을 제외하고 소문자 또는 대문자 단어의 순서 만 찾습니다.
\ K로 가변 길이 lookbehind 시뮬레이션
일부 정규식 (Perl, PCRE, Oniguruma, Boost)은 고정 길이 lookbehind만을 지원하지만 패턴의 시작 부분에서 가변 길이 lookbehind를 시뮬레이트하는 데 사용할 수있는 \K
기능을 제공합니다. \K
가 발생하면이 지점까지 일치하는 텍스트는 삭제되고 \K
다음에 오는 패턴 부분과 일치하는 텍스트 만 최종 결과에 보관됩니다.
ab+\Kc
다음과 같습니다.
(?<=ab+)c
일반적으로 다음 형식의 패턴입니다.
(subpattern A)\K(subpattern B)
끝나는 유사하게 :
(?<=subpattern A)(subpattern B)
B 하위 패턴이 A 하위 패턴과 동일한 텍스트를 일치시킬 수있는 경우를 제외하고는 A 하위 패턴이 실제 lookbehind와 달리 텍스트를 계속 소비하므로 미묘하게 다른 결과가 발생할 수 있습니다.