그룹이 캡처했는지에 따라 다른 패턴 매칭
조건 패턴은 "group N 이 뭔가 캡처했으면 YES 분기, 아니면 NO 분기" 표현 가능. 문법: (?(N)yes|no), N 은 그룹 번호, named 그룹은 (?(name)yes|no).
이건 niche 하지만 강력한 기능. "여는 따옴표 있으면 일치하는 닫는 따옴표 요구; 아니면 따옴표 요구 없음" 같은 패턴 표현 방법.
예시: optional 괄호 쌍
패턴: (\()?\d+(?(1)\)) — "optional 여는 괄호, 그 다음 숫자, 그 다음 일치하는 닫는 괄호 — 여는 거 있을 때만."
- 매칭
123(괄호 없음, 둘 다 OK) - 매칭
(123)(열고 닫음) - 매칭 NO
(123또는123)(불일치)
Flavor 지원
조건은 PCRE 기능, Python re, Perl, .NET, PHP, Ruby (Regexp::Engine 통해) 지원. JavaScript, Go, RE2 에 NO.
언제 손 뻗는가
솔직히 거의 안. 조건 이득 받는 패턴 대부분이 alternation 으로 더 깨끗: (?:\(\d+\)|\d+) 가 위 조건과 같은 거 매칭, 모든 flavor 에서 동작. YES 분기가 NO 분기보다 훨씬 복잡하고 중복 회피 원할 때만 조건.