Possessive vs atomic — 같은 아이디어
Possessive quantifier (*+, ++, ?+, {n,m}+) 와 atomic 그룹이 같은 거 — backtracking 비활성화 — 다른 문법으로.
a++ 가 (?>a+) 와 등가. 둘 다 한 번 소비한 글자 돌려주기 거부.
어느 거 사용
Possessive: 단일 quantifier 에 no-backtrack 룰 적용 시. \d++, \w*+.
Atomic 그룹: 멀티 요소 패턴 wrap 하고 전체 lock 원할 때. (?>\d{3}-\d{4}) 가 대시와 숫자의 다른 split 으로 backtrack X.
엔진 지원 비교
| 엔진 | Atomic | Possessive |
|---|---|---|
Python re 3.11+ | ✓ | ✓ |
Python regex | ✓ | ✓ |
| PCRE / PHP | ✓ | ✓ |
| Java | ✓ | ✓ |
| Ruby | ✓ | ✓ (1.9+) |
| .NET | ✓ | ✗ |
| JavaScript | ✗ | ✗ |
| RE2/Go | — | — |
Portable workaround
본인 엔진이 둘 다 없으면 (특히 JavaScript) workaround 가 backtracking 필요 없게 패턴 리팩토. Negated character class (.+?X 대신 [^X]+) 또는 anchor 된 alternation. 종종 패턴 더 빠름 AND 더 가독.