전후방 탐색에도 비용이 들어
각 전후방 탐색은 관련 위치에서 하위 패턴을 따로 평가해. 여러 조건을 겹치면 같은 텍스트를 반복해서 살필 수 있으므로 긴 입력에서는 캡처 후 검사하는 방식보다 느려질 수 있어.
탐욕적 수량자와 결합할 때
(?=.*X)(?=.*Y).*처럼 탐욕적 수량자와 겹치면 조건을 확인한 뒤 본 패턴에서 다시 백트래킹할 수 있어. ^와 $로 범위를 전체 입력에 고정하면 시작 위치를 여러 번 바꾸는 낭비는 줄일 수 있지만, 패턴 전체의 비용은 실제 입력으로 측정해야 해.
다른 도구가 더 나은 경우
- 문자를 실제로 소비해도 된다면
(?=[a-z])대신[a-z]를 써. - 정규식 하나가 지나치게 복잡해지면 넓게 매칭한 뒤 일반 코드에서 필터링해.
- Go, RE2, ripgrep 기본 엔진처럼 지원하지 않는 환경에서는 캡처 그룹과 후처리를 사용해.
선택 기준
분할 위치나 겹친 조건처럼 너비 0 검사가 꼭 필요할 때 전후방 탐색을 선택해. 값 추출만 필요하다면 캡처 그룹이 더 단순하고 호환성도 높을 수 있어.