정규식 대부분은 그냥 글자 그대로야
입문자는 \b\w+@\w+\.\w+\b 같은 거 보고 겁먹어서, 가장 단순하고 흔한 정규식이 그냥… 리터럴 문자열이라는 걸 잊어버려.
패턴 cat 은 부분 문자열 cat 을 매칭해. 어디든. scatter 안의 cat, concatenate 안의 cat, cat 안의 cat. 끝. 마법 없고, 특수 의미 없어. 정규식 대부분의 글자는 리터럴 — 자기 자신을 매칭해.
리터럴이 *아닌* 글자들
특수 의미를 가진 작은 글자 집합이 있어. 메타문자 라고 불러. 이 리스트만 외우면 "왜 내 패턴이 이상하게 동작하지?" 트러블슈팅의 거의 전부야:
. ^ $ * + ? ( ) [ ] { } | \
나머지 — 문자, 숫자, 공백, 하이픈 (대부분), 콤마, 콜론 — 다 리터럴이야. 메타문자를 리터럴로 쓰고 싶으면 앞에 백슬래시 붙여: \. 는 진짜 점 하나를 매칭해.
암묵적 "포함"
기본적으로 cat 은 "입력 *어딘가에* 문자열 cat 이 있나?" 지 "입력 전체가 cat 인가?" 가 아냐. 이게 critical한 차이. *전체* 매칭하려면 ^ 와 $ 로 앵커를 박아 (Classes 트랙에서 다룸) — ^cat$ 는 정확히 cat 한 글자만 매칭해.
도구마다 기본값이 달라. grep 과 Python re.search() 는 "포함." Python re.fullmatch() 와 자바스크립트 폼 검증 정규식은 "전체." 패턴이 의외로 동작할 때 제일 먼저 체크할 거야.