본문 바로가기
C.W.K.
Stream
Lesson 03 of 10 · published

리터럴 매칭 — 이미 알고 있는 80%

~8 min · literals, fundamentals

Level 0패턴 호기심
0 XP0/90 lessons0/15 achievements
0/100 XP to next level100 XP to go0% complete

정규식 대부분은 그냥 글자 그대로야

입문자는 \b\w+@\w+\.\w+\b 같은 패턴을 보고 겁부터 먹어. 그러다 가장 단순하고 흔한 정규식은 그냥 리터럴 문자열이라는 사실을 놓치지.

패턴 cat은 어디에서든 부분 문자열 cat을 매칭해. scatter, concatenate, 그리고 단독 cat 안에서 모두 찾을 수 있어. 그게 전부야. 마법도 특수한 의미도 없어. 정규식에 쓰는 글자 대부분은 자기 자신을 매칭하는 리터럴이야.

리터럴이 *아닌* 글자들

특수한 의미를 가진 작은 글자 집합이 있어. 메타문자라고 불러. "왜 내 패턴이 이상하게 동작하지?" 싶을 때는 이 목록부터 확인해:

.  ^  $  *  +  ?  (  )  [  ]  {  }  |  \

그 밖의 문자, 숫자, 공백, 쉼표, 콜론과 대부분의 하이픈은 리터럴이야. 메타문자를 글자 그대로 쓰고 싶다면 앞에 백슬래시를 붙여. \.는 아무 문자가 아니라 진짜 점 하나를 매칭해.

암묵적인 "포함"

기본적으로 cat은 "입력 어딘가에 문자열 cat이 있나?"를 묻지, "입력 전체가 cat인가?"를 묻지 않아. 둘은 완전히 다른 질문이야. *전체*를 매칭하려면 ^$로 앵커를 붙여. Classes 트랙에서 자세히 다룰 ^cat$는 정확히 세 글자로 된 문자열 cat만 매칭해.

도구마다 기본값도 달라. grep과 Python re.search()는 입력 안에서 찾고, Python re.fullmatch()와 JavaScript 폼 검증 정규식은 입력 전체를 검사해. 패턴이 예상 밖으로 동작하면 가장 먼저 이 차이를 확인해.

Code

리터럴과 특수·python
import re

# 순수 리터럴 — 예상대로 동작
re.findall(r'cat', 'concatenate scatter cat')
# ['cat', 'cat', 'cat']

# 점은 특수 문자 — 아무 글자나 매칭
re.findall(r'c.t', 'cat cot cut c@t cxt')
# ['cat', 'cot', 'cut', 'c@t', 'cxt']

# 백슬래시로 이스케이프하면 다시 리터럴
re.findall(r'c\.t', 'cat c.t cot')
# ['c.t']

External links

Exercise

문자열 3.14를 매칭하는 패턴을 두 개 써봐. 하나는 부분 검색용이고, 다른 하나는 앵커를 갖춘 전체 일치용이야. 정규식 실습 도구에서 테스트하되, 실행하기 전에 3x143X14가 어느 패턴에서 매칭될지 *예측*해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.