소유적 수량자와 원자 그룹은 같은 선택지를 없애
*+, ++, ?+, {n,m}+ 같은 소유적 수량자는 자신이 소비한 문자를 돌려주지 않아. 원자 그룹도 그룹 안에서 이미 성공한 선택으로 다시 들어가지 않아.
단일 수량자에서는 a++와 (?>a+)가 같은 효과를 내. 둘 다 a+가 잡은 문자를 뒤 패턴을 위해 내놓지 않지.
고정할 범위에 맞춰 문법을 골라
소유적 수량자는 \d++, \w*+처럼 수량자 하나의 소비량을 확정할 때 간결해.
원자 그룹은 (?>\d{3}-\d{4})처럼 여러 요소로 이루어진 구간 안의 백트래킹을 함께 막고 싶을 때 써.
지원 범위는 엔진마다 달라
| 엔진 | 원자 그룹 | 소유적 수량자 |
|---|---|---|
Python re 3.11+ | ✓ | ✓ |
Python regex | ✓ | ✓ |
| PCRE / PHP | ✓ | ✓ |
| Java | ✓ | ✓ |
| Ruby | ✓ | ✓ (1.9+) |
| .NET | ✓ | ✗ |
| JavaScript | ✗ | ✗ |
| RE2/Go | — | — |
문법이 없다면 경계를 더 분명하게 다시 써
JavaScript처럼 두 기능을 지원하지 않는 엔진에서는 모호한 분할 자체를 줄여야 해. 종료 표식이 한 글자라면 .+?X 대신 [^X]+X처럼 허용하지 않을 문자를 경계로 삼을 수 있어. 여러 글자 표식은 문자 클래스 하나와 같지 않으므로 별도 구조가 필요해.