조건 패턴은 캡처 여부 말고 다른 검사도 분기로 쓸 수 있어
트랙 4의 (?(N)yes|no)는 번호 그룹이 참여했는지에 따라 뒤 패턴을 골랐어. 일부 엔진은 이름 붙은 그룹이나 전후방 탐색 결과도 조건으로 사용할 수 있어.
PCRE는 전방 탐색 결과로 분기할 수 있어
(?(?=lookahead)yes|no)는 전방 탐색이 성공하면 yes, 실패하면 no를 적용해. 입력을 소비하지 않고 다음 문자가 특정 모양인지 확인한 뒤 이어질 규칙을 고를 수 있지.
이름 조건은 번호보다 편집에 강해
(?(name)yes|no)는 이름 붙은 그룹이 참여했는지 검사해. 앞쪽에 다른 괄호를 추가해도 이름은 밀리지 않아서 번호 조건보다 의도를 유지하기 쉬워.
재귀와 조건을 합치면 문법은 강해지고 독해는 어려워져
재귀 깊이나 앞선 분기 상태에 따라 다시 재귀할지 결정하는 패턴도 만들 수 있어. 하지만 이런 패턴은 동작을 추적하고 실패 입력을 검증하기가 아주 어려워.
선택이나 코드가 더 잘 읽히는지 먼저 확인해
실제 코드에서는 "X가 있으면 Y도 있어야 한다"처럼 두 분기가 긴 공통 부분을 공유할 때 조건 패턴이 중복을 줄일 수 있어. 그보다 복잡해지면 선택으로 풀거나 매칭 뒤 코드에서 검사하고, 문법 구조를 파싱해야 한다면 전용 파서로 넘겨.