같은 패턴 안에서 캡처된 그룹 재사용
Backreference 는 "N번째 캡처 그룹이 매칭한 같은 텍스트 매칭" 의미. 문법: group 1 은 \1, group 2 는 \2 등.
고전 예시: 중복 단어 감지. 패턴 \b(\w+)\s+\1\b 는 "the the", "and and", "hello hello" 매칭 — 어떤 단어든 자기 자신이 따라옴.
패턴 재사용과 어떻게 다른가
Backreference \1 는 패턴을 반복하지 않음; 그룹이 매칭한 같은 텍스트 요구. 패턴 (\w+) \1 입력 "the cat": group 1 이 'the' 캡처, 그 다음 \1 이 리터럴 텍스트 'the' 따라오기 요구 — 안 따라옴 ('cat' 이 다음). 그래서 매칭 없음.
vs (\w+) (\w+) 는 "the cat" 매칭, \w+ 가 두 번 다 어떤 단어든 매칭하니까.
엔진 지원
Backreference 는 NFA-only 기능. Python re, JavaScript, PCRE, Java 다 지원. RE2/Go/ripgrep 미지원 — linear time 보장의 가격.
중복 외 사용
- 균형 잡힌 따옴표/괄호 매칭:
(['"]).+?\1가 어느 따옴표 종류든 따옴표 문자열 매칭. - 반복 글자 run:
(.)\1{2,}가 같은 글자 3개 이상 매칭. - HTML 태그 쌍:
<(\w+)>.+?</\1>가 일치하는 open/close 태그 매칭 (실제로 HTML 이렇게 파싱하지 마).