단어 문자와 비단어 문자 사이의 보이지 않는 위치
\b는 단어 문자 \w와 비단어 문자 사이를 확인하는 너비 0 검사야. 문자를 소비하지 않고 현재 위치가 단어 경계라고 확인만 해.
\bcat\b는 The cat sat의 독립된 cat을 매칭하지만 concatenate 안의 cat은 매칭하지 않아. 그 안에서는 c 앞과 t 뒤에 다른 단어 문자가 있어서 경계가 없거든.
단어 경계가 생기는 위치
\b는 다음 세 위치에서 매칭해.
- 첫 글자가 단어 문자라면 문자열 시작.
- 마지막 글자가 단어 문자라면 문자열 끝.
- 단어 문자와 비단어 문자가 맞닿는 자리.
\B는 그 반대인 "단어 경계가 아닌 위치"를 확인해. \Bcat\B는 concatenate 안의 cat을 매칭하지만 The cat sat의 독립된 단어는 매칭하지 않아.
Unicode에서 다시 주의할 점
단어 경계는 \w의 정의에 의존하고, 그 정의는 엔진과 플래그마다 달라. ASCII 전용 모드에서는 안녕 안에 \w 글자가 없으므로 \b도 한글 단어 경계를 인식하지 못해. Python 기본 Unicode 모드에서는 한글을 단어 문자로 다뤄. 반면 JavaScript의 /u만으로는 \w와 \b가 한글을 단어로 인식하지 않아. Unicode 속성 이스케이프와 양옆 조건을 명시해 경계를 만들어야 해.