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 안의 cat, concatenate 안의 cat, cat 안의 cat. 끝. 마법 없고, 특수 의미 없어. 정규식 대부분의 글자는 리터럴 — 자기 자신을 매칭해.

리터럴이 *아닌* 글자들

특수 의미를 가진 작은 글자 집합이 있어. 메타문자 라고 불러. 이 리스트만 외우면 "왜 내 패턴이 이상하게 동작하지?" 트러블슈팅의 거의 전부야:

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

나머지 — 문자, 숫자, 공백, 하이픈 (대부분), 콤마, 콜론 — 다 리터럴이야. 메타문자를 리터럴로 쓰고 싶으면 앞에 백슬래시 붙여: \. 는 진짜 점 하나를 매칭해.

암묵적 "포함"

기본적으로 cat 은 "입력 *어딘가에* 문자열 cat 이 있나?" 지 "입력 전체가 cat 인가?" 가 아냐. 이게 critical한 차이. *전체* 매칭하려면 ^$ 로 앵커를 박아 (Classes 트랙에서 다룸) — ^cat$ 는 정확히 cat 한 글자만 매칭해.

도구마다 기본값이 달라. grep 과 Python re.search() 는 "포함." Python re.fullmatch() 와 자바스크립트 폼 검증 정규식은 "전체." 패턴이 의외로 동작할 때 제일 먼저 체크할 거야.

Code

리터럴 vs 특수·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']

# 백슬래시로 escape — 다시 리터럴
re.findall(r'c\.t', 'cat c.t cot')
# ['c.t']

External links

Exercise

문자열 3.14 를, 그것만 매칭하는 리터럴 패턴을 써 봐 — 부분 검색용 (그냥 3.14 모양) 그리고 fullmatch 용 (앵커 박힌). regex playground 에서 테스트하고, Run 누르기 전에 3x143X14 가 어느 버전에서 매칭될지 *예측* 해 봐.

Progress

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

댓글 0

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

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