기호 하나로 거의 모든 글자
.는 줄바꿈을 제외한 글자 한 개를 매칭해. 모두가 잊고 실서비스에서 한 번씩 물리는 부분은 바로 "줄바꿈 제외"야.
패턴 c.t는 cat, cot, cut, c@t, c1t, c t, c.t를 모두 매칭해. 리터럴 점도 글자 하나니까 당연히 포함돼.
패턴 .만 쓰면 줄바꿈을 뺀 모든 글자를 한 글자씩 매칭해. Python에서 re.findall(r'.', 'abc')를 실행하면 ['a', 'b', 'c']가 나와.
DOTALL / s 플래그
.가 줄바꿈까지 매칭하게 하려면 DOTALL 플래그가 필요해. Python에서는 re.DOTALL 또는 re.S, PCRE·JavaScript 등에서는 s 플래그나 인라인 (?s)를 써. 이 플래그가 없으면 여러 줄 입력에서 \n마다 멈춰. "한 줄에서는 되는데 두 줄에서는 실패해"라는 고전적인 버그가 여기서 나와.
점은 탐욕적인 친구야
트랙 3에서 배울 수량자와 결합한 .*는 "아무 글자나 0번 이상"이라는 뜻이야. 강력하지만 위험해. 백트래킹하기 전에 입력을 끝까지 먹으려 하거든. 경계가 보인다면 게으른 .*?나 부정형 문자 클래스 [^"]*가 더 나은지 먼저 확인해.