정규식 대부분은 그냥 글자 그대로야
입문자는 \b\w+@\w+\.\w+\b 같은 패턴을 보고 겁부터 먹어. 그러다 가장 단순하고 흔한 정규식은 그냥 리터럴 문자열이라는 사실을 놓치지.
패턴 cat은 어디에서든 부분 문자열 cat을 매칭해. scatter, concatenate, 그리고 단독 cat 안에서 모두 찾을 수 있어. 그게 전부야. 마법도 특수한 의미도 없어. 정규식에 쓰는 글자 대부분은 자기 자신을 매칭하는 리터럴이야.
리터럴이 *아닌* 글자들
특수한 의미를 가진 작은 글자 집합이 있어. 메타문자라고 불러. "왜 내 패턴이 이상하게 동작하지?" 싶을 때는 이 목록부터 확인해:
. ^ $ * + ? ( ) [ ] { } | \
그 밖의 문자, 숫자, 공백, 쉼표, 콜론과 대부분의 하이픈은 리터럴이야. 메타문자를 글자 그대로 쓰고 싶다면 앞에 백슬래시를 붙여. \.는 아무 문자가 아니라 진짜 점 하나를 매칭해.
암묵적인 "포함"
기본적으로 cat은 "입력 어딘가에 문자열 cat이 있나?"를 묻지, "입력 전체가 cat인가?"를 묻지 않아. 둘은 완전히 다른 질문이야. *전체*를 매칭하려면 ^와 $로 앵커를 붙여. Classes 트랙에서 자세히 다룰 ^cat$는 정확히 세 글자로 된 문자열 cat만 매칭해.
도구마다 기본값도 달라. grep과 Python re.search()는 입력 안에서 찾고, Python re.fullmatch()와 JavaScript 폼 검증 정규식은 입력 전체를 검사해. 패턴이 예상 밖으로 동작하면 가장 먼저 이 차이를 확인해.