조건 달기
드물게 쓰는 기능이지만 정규 표현식 내에서 조건 처리가 가능합니다.
조건 사용하기
정규 표현식 조건은 물음표 ?
를 사용해 정의합니다.
역참조 조건
역참조 조건은 이전 하위 표현식이 검색에 성공했을 경우에만 다시 그 표현식을 검사합니다.
조건을 표현하는 구문은 다음과 같습니다.
(?(backreference)true)
(?(backreference)true)
?
로 조건을 시작하고 괄호 안에서 역참조를 지정한 다음, 역참조가 존재하는 경우에만 평가될 표현식이 뒤에 나옵니다.
예시:
(<[Aa]\s+[^>]+<\s*)?<[Ii][Mm][Gg]\s+[^>]+>(?(1)\s*<\/[Aa]>)
(<[Aa]\s+[^>]+<\s*)?<[Ii][Mm][Gg]\s+[^>]+>(?(1)\s*<\/[Aa]>)
여기서 ?(1)
은 역참조 1(<A>
시작 태그)이 있을 때만 수행하라는 뜻입니다.
역참조 번호를 조건에서 이스케이프할 필요는 없습니다.
조건문 else
표현식을 사용할 수도 있습니다. 이 경우의 구문은 다음과 같습니다.
(?(backreference)true|false)
(?(backreference)true|false)
전후방탐색 조건
전후방탐색 조건은 전후방탐색 명령의 성공 여부에 따라 표현식을 수행할지 결정합니다. 구문은 역참조와 동일합니다.
올바른 미국 우편번호를 찾는 정규 표현식은 다음과 같이 작성할 수 있습니다.
\d{5}(?(?=-)-\d{4})
\d{5}(?(?=-)-\d{4})
전후방탐색 조건을 이용해서 33333-
과 같은 잘못된 우편번호는 일치하지 않습니다.
더 간단한 방법으로 비슷한 결과를 얻을 수 있으므로 이 기능은 자주 사용하지 않습니다.