매칭을 위치에 고정하기
앵커는 글자를 소비하지 않고 현재 위치가 특정 경계인지 확인하는 너비 0 검사야.
^— 문자열 시작이야. MULTILINE 플래그가 있으면 각 줄의 시작도 포함해.$— 문자열 끝이야. MULTILINE 플래그가 있으면 각 줄의 끝도 포함해.
앵커가 없으면 패턴은 입력 어디에서나 매칭해. ^pattern$은 입력 전체가 이 패턴과 맞아야 한다는 뜻이야.
MULTILINE 플래그
기본적으로 ^와 $는 전체 문자열의 시작과 끝만 확인해. Python의 re.MULTILINE 또는 PCRE·JavaScript의 m 플래그를 켜면 각 줄의 시작과 끝도 확인하지. 로그 파일이나 여러 줄 사용자 입력을 처리할 때 중요해.
Python에서는 fullmatch로 의도를 드러내
re.fullmatch(pat, text)는 전체 문자열이 패턴과 일치해야 한다는 의도를 API로 직접 표현해. $는 마지막 줄바꿈 직전에도 매칭할 수 있고 문자열로 패턴을 이어 붙이면 선택 범위가 달라질 수 있으므로, ^와 $를 붙인 패턴과 언제나 같다고 보면 안 돼.
\A와 \Z 앵커
일부 엔진은 MULTILINE의 영향을 받지 않는 별도 앵커를 제공해. \A는 Python, PCRE, .NET에서 절대 문자열 시작을 뜻해. Python의 \Z는 절대 문자열 끝이지만 PCRE와 .NET의 \Z는 마지막 줄바꿈 직전에도 매칭할 수 있어. 그 엔진들에서 절대 끝은 \z야.