본문으로 건너뛰기

조건 달기

드물게 쓰는 기능이지만 정규 표현식 내에서 조건 처리가 가능합니다.

조건 사용하기

정규 표현식 조건은 물음표 ?를 사용해 정의합니다.

역참조 조건

역참조 조건은 이전 하위 표현식이 검색에 성공했을 경우에만 다시 그 표현식을 검사합니다.

조건을 표현하는 구문은 다음과 같습니다.

(?(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-과 같은 잘못된 우편번호는 일치하지 않습니다.

더 간단한 방법으로 비슷한 결과를 얻을 수 있으므로 이 기능은 자주 사용하지 않습니다.