후방 탐색은 바로 앞 문맥만 확인해
(?<=...)는 현재 위치 앞쪽의 문자가 조건과 맞는지 검사하지만 그 문자를 매칭 결과에는 넣지 않아. 접두사는 조건으로만 쓰고 뒤의 값만 꺼내고 싶을 때 유용해.
표식 뒤의 값만 추출해 봐
(?<=\$)\d+(\.\d+)?는 달러 기호가 바로 앞에 있는 숫자를 찾아. $19.99에서 결과는 19.99이고 $는 포함되지 않아. 같은 방식으로 user_ 뒤의 식별자나 on 뒤의 날짜만 꺼낼 수 있어.
후방 탐색의 길이 규칙은 엔진마다 크게 달라
- Python 내장
re: 고정 길이만 허용해. 길이가 달라지는 대안이나 수량자가 들어가면 컴파일 오류가 날 수 있어. - Python
regex와 .NET: 가변 길이 후방 탐색을 지원해. - Java: 최대 길이를 계산할 수 있는 일부 가변 길이를 지원하지만 버전별 동작을 확인해야 해.
- PCRE2: 10.42 이하에서는 각 대안이 고정 길이여야 하고, 10.43부터는 설정된 한도 안에서 제한적인 가변 길이를 지원해.
- JavaScript: ES2018부터 후방 탐색을 지원하고 비고정 길이 형태도 정의하지만 실제 대상 런타임의 지원 여부를 확인해야 해.
- RE2와 Go: 후방 탐색을 지원하지 않아.
후방 탐색은 같은 문법처럼 보여도 이식성이 크게 갈리는 기능이야. 패턴을 정하기 전에 실행할 엔진과 버전부터 확인해.