정규식 본문에서 이러한 것들을 찾았지만 사용할 수있는 단서가 없습니다. 누군가가 예를 들어서 어떻게 작동하는지 이해할 수 있습니까?
(?!) - negative lookahead
(?=) - positive lookahead
(?<=) - positive lookbehind
(?<!) - negative lookbehind
(?>) - atomic group
정규식 본문에서 이러한 것들을 찾았지만 사용할 수있는 단서가 없습니다. 누군가가 예를 들어서 어떻게 작동하는지 이해할 수 있습니까?
(?!) - negative lookahead
(?=) - positive lookahead
(?<=) - positive lookbehind
(?<!) - negative lookbehind
(?>) - atomic group
답변:
주어진 문자열 foobarbarfoo
:
bar(?=bar) finds the 1st bar ("bar" which has "bar" after it)
bar(?!bar) finds the 2nd bar ("bar" which does not have "bar" after it)
(?<=foo)bar finds the 1st bar ("bar" which has "foo" before it)
(?<!foo)bar finds the 2nd bar ("bar" which does not have "foo" before it)
당신은 또한 그들을 결합 할 수 있습니다 :
(?<=foo)bar(?=bar) finds the 1st bar ("bar" with "foo" before it and "bar" after it)
(?=)
표현식 B가 따르는 표현식 A를 찾으십시오.
A(?=B)
(?!)
표현식 B가 따르지 않는 표현식 A를 찾으십시오.
A(?!B)
(?<=)
표현식 B가 앞에 오는 표현식 A를 찾으십시오.
(?<=B)A
(?<!)
표현식 B가 선행하지 않는 표현식 A를 찾으십시오.
(?<!B)A
(?>)
원자 그룹은 그룹을 종료하고 그룹 내에서 첫 번째 일치 패턴 이후에 대체 패턴을 버립니다 (역 추적 사용 안함).
(?>foo|foot)s
에 적용됨 foots
은 첫 번째 대안과 일치하고 즉시 추적하지 않으므로 foo
실패 s
하고 역 추적이 비활성화되면 중지비 원자 그룹은 역 추적을 허용합니다. 이후의 일치가 실패하면 전체 표현식에 대한 일치가 발견되거나 모든 가능성이 소진 될 때까지 역 추적 패턴을 사용하고 대체 패턴을 사용합니다.
(foo|foot)s
foots
의지에 적용 :
foo
대로 실패 하고 두 번째 대안으로 되돌아갑니다.s
foots
foot
한 다음 s
바로 다음과 같이 성공 foots
하고 중지하십시오.둘러보기는 너비가 0 인 어설 션입니다. 그들은 정규식 (앞 또는 뒤를 기준으로 현재 위치의 오른쪽 또는 왼쪽으로)을 확인하고 일치하는 것이 발견되면 (긍정적이든 부정적이든에 따라) 성공 또는 실패하고 일치하는 부분을 버립니다. 그들은 어떤 문자도 소비하지 않습니다-정규 표현식에 대한 일치는 (있는 경우) 동일한 커서 위치에서 시작됩니다.
읽기 regular-expression.info 자세한 내용은.
통사론:
(?=REGEX_1)REGEX_2
REGEX_1이 일치하는 경우에만 일치합니다. REGEX_1과 일치하면 일치가 삭제되고 REGEX_2 검색이 동일한 위치에서 시작됩니다.
예:
(?=[a-z0-9]{4}$)[a-z]{1,2}[0-9]{2,3}
REGEX_1은 [a-z0-9]{4}$
4 개의 영숫자 문자와 줄 끝이 일치합니다.
REGEX_2는 [a-z]{1,2}[0-9]{2,3}
1 ~ 2 개의 문자 다음에 2 ~ 3 개의 숫자와 일치합니다.
REGEX_1은 문자열 길이가 실제로 4인지 확인하지만 문자를 소비하지 않으므로 REGEX_2에 대한 검색이 동일한 위치에서 시작됩니다. 이제 REGEX_2는 문자열이 다른 규칙과 일치하는지 확인합니다. 미리 보지 않으면 길이가 3 또는 5 인 문자열과 일치합니다.
통사론:
(?!REGEX_1)REGEX_2
REGEX_1이 일치하지 않는 경우에만 일치합니다. REGEX_1을 확인한 후 REGEX_2에 대한 검색이 동일한 위치에서 시작됩니다.
예:
(?!.*\bFWORD\b)\w{10,30}$
미리보기 부분 FWORD
은 문자열에서를 확인 하고 찾지 못하면 실패합니다. 찾지 못하면 FWORD
미리보기가 성공하고 다음 부분은 문자열 길이가 10에서 30 사이이고 단어 문자 만 포함하는지 확인합니다.a-zA-Z0-9_
Look-Behind는 Look-Ahead와 유사합니다. 현재 커서 위치 뒤에서 만 보입니다. javascript와 같은 일부 정규 표현식은 look-behind assertion을 지원하지 않습니다. 그리고 그것을 지원하는 대부분의 맛 (PHP, Python 등)은 뒤에 보이는 부분의 길이가 고정되어 있어야합니다.
(?=REGEX_1)REGEX_2
경우에만 일치합니다 . REGEX_2
REGEX_1