Lookaround 가 정규식에서 가장 분열된 기능
"위치 주변 보기" 가 universal 일 줄 알았지. 아냐. 2026 기준 실제 풍경:
| 엔진 | Lookahead | Lookbehind | Variable-width Lookbehind |
|---|---|---|---|
Python re | ✓ | ✓ | ✗ (에러) |
Python regex | ✓ | ✓ | ✓ |
| JavaScript | ✓ | ✓ (ES2018) | ✓ (ES2018) |
| PCRE | ✓ | ✓ | 부분 (버전 의존) |
| Java | ✓ | ✓ | 제한 (max 길이 bound 필수) |
| .NET | ✓ | ✓ | ✓ |
Go regexp / RE2 | ✗ | ✗ | ✗ |
| ripgrep (기본) | ✗ | ✗ | ✗ |
ripgrep --pcre2 | ✓ | ✓ | 부분 |
Portability 스펙트럼
Universal: Lookaround 없음. Anchor 와 character class 만.
대부분 엔진: Lookahead (positive 와 negative). 거의 항상 지원.
대부분 엔진, 좀 까다: Lookbehind, fixed-width. Python, Java, .NET. 너비 룰 주의.
현대 엔진만: Variable-width lookbehind. JavaScript ES2018+, .NET, Python regex.
절대 NO: Go, RE2. Lookaround 쓰는 패턴 컴파일 안 됨.
실전 조언
본인 코드가 여러 언어에서 돌거나 정규식이 Go 서비스로 갈 가능성이면 lookaround 회피. Anchor, capture, post-processing 사용. 패턴이 더 못 생김 but portable.
한 엔진에 머물면 lookaround 자유롭게 — 많은 문제에 가장 깨끗한 도구.