백슬래시는 특수 문자를 리터럴로, 리터럴을 특수 문자로 바꿔
두 가지 사실만 기억하면 돼.
- 메타문자를 글자 그대로 매칭하려면 앞에 백슬래시를 붙여.
\.는 점,\$는 달러 기호,\\는 백슬래시를 매칭해. - 평범한 문자에 특수한 뜻을 주려면 역시 백슬래시를 붙여.
\d는 숫자,\b는 단어 경계,\n은 줄바꿈이야.
백슬래시는 정규식에서 의미를 뒤집는 스위치야.
원시 문자열로 이중 해석을 막아
Python을 비롯한 많은 언어에서 백슬래시는 문자열 이스케이프이기도 해. 그래서 Python 문자열 안의 "\d"는 정규식 엔진에 도착하기 전에 문자열 파서가 먼저 해석해. 어떤 때는 우연히 괜찮고, 어떤 때는 조용히 패턴을 망쳐.
정규식 패턴에는 원시 문자열이나 그 언어의 등가 문법을 써. Python과 Rust에서는 r"\d+", JavaScript에서는 정규식 리터럴 /\d+/이 같은 역할을 해.
원시 문자열을 쓰지 않으면 Python의 "\d"는 우연히 백슬래시를 보존하지만 "\b"는 코드 포인트 8인 ASCII 백스페이스가 돼. 겉으로는 멀쩡한 패턴이 조용히 틀어지지.
변수를 넣을 때는 전용 이스케이프 함수
사용자 입력이나 변수를 정규식에 넣을 때는 Python re.escape(), 현대 JavaScript RegExp.escape(), Go regexp.QuoteMeta()를 써. RegExp.escape()가 없는 구형 JavaScript 런타임에서만 검증된 폴리필이 필요해. 사용자 입력을 그대로 문자열로 이어 붙이면 안 돼.