Lookaround 무료 아냐
각 lookaround 가 모든 관련 위치에서 엔진이 독립적으로 평가하는 sub-pattern. 여러 lookaround 있는 패턴이 등가 캡처-테스트 패턴보다 느릴 수 있음, 특히 긴 입력에.
엔진이 backtrack 해야 할 때
Greedy quantifier 와 결합된 lookaround 가 backtracking 곱할 수 있음. (?=.*X)(?=.*Y).* 가 X 와 Y 를 *거의* 가진 입력에 작업 많이 trigger, 엔진이 각 lookahead 확인 후 메인 패턴 시도.
완화: lookaround 에 anchor. ^(?=.*X)(?=.*Y).*$ 가 적어도 모든 위치 아닌 전체 문자열로 scope 제한.
Lookaround NOT 사용 시기
1. Character class 가 동작할 때. 패턴 시작의 (?=[a-z]) 는 그냥 "소문자 매칭." 소비 NOT 필요 없으면 [a-z] 직접 사용.
2. Two-pass 가 더 명확할 때. 정규식으로 넓게 매칭, 코드에서 필터. Stack 된 lookaround 있는 단일 mega 패턴보다 종종 가독.
3. 엔진이 미지원일 때. Go, RE2, ripgrep 기본. 캡처 사용.
First-pass 테스트
Lookaround 손 뻗기 전에 묻기: "캡처 그룹 + .group(1) 또는 post-processing 으로 풀 수 있나?" 캡처 솔루션이 더 portable, 종종 더 명확. "소비 안 하기" 의 가치가 높을 때 lookaround — split, stacked 룰, sed 친화 패턴.
피파의 실제 코드 lookaround
cwkPippa 코드베이스에서 (?= 와 (?<= 검색. 라우트 매칭, 로그 파싱, Markdown sanitation 에서 발견 — but 캡처 그룹에 ~10:1 비율로 outnumbered. 옳은 도구는 일에 의존.