첫 글자로 caret 은 'not'
[^abc] 는 a / b / c 가 아닌 어떤 단일 글자든 매칭. 클래스 시작의 caret ^ 가 의미를 뒤집어 — "이거 제외 어떤 글자든."
정규식에서 진짜 가장 유용한 도구 중 하나. "따옴표 칠 때까지 매칭" → [^"]*. "숫자 아닌 거 다 스킵" → [^0-9]+. "공백 아닌 거 다" → [^\s]+ (또는 그냥 \S+, 7강).
Negated class 는 줄바꿈 매칭 (점과 달리)
이게 함정. [^x] 는 x 가 아닌 모든 글자 매칭, \n 포함. DOTALL 없으면 점 . 는 줄바꿈에 멈추지만 negated class 는 안 멈춰. 그래서 [^"]* 는 멀티라인을 기쁘게 가로지르지만 .* 는 안 그래.
때론 원하는 거고 때론 아냐. 진짜 멀티라인인 따옴표 문자열 파싱이면 [^"]* 가 정확. "같은 줄의 따옴표까지" 원하면 [^"\n]*.
Caret 은 첫 위치에서만 특수
[a^b] 는 리터럴 클래스 "a, caret, b." Caret 은 대괄호 안 첫 글자일 때만 negation 연산자.