C.W.K.
Stream
Lesson 02 of 12 · published

점 (.) — 만능 와일드카드

~8 min · dot, wildcard, dotall

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

한 패턴 기호, 거의 모든 글자

.줄바꿈을 제외한 어떤 글자 한 개 매칭. 그 "줄바꿈 제외" 가 모두가 까먹고 모두가 production 에서 물리는 부분.

패턴 c.tcat, cot, cut, c@t, c1t, c t, c.t (그래, 리터럴 점도 — . 가 점 포함 모든 글자 매칭하니까).

패턴 . 자체는 *모든* 글자를 한 글자씩 매칭, 줄바꿈만 제외. Python 에서 re.findall(r'.', 'abc') 돌리면 ['a', 'b', 'c'].

DOTALL / 's' 플래그

. 가 줄바꿈도 매칭하길 원하면 DOTALL 플래그 필요. Python: re.DOTALL 또는 re.S. PCRE / JavaScript / 다른 다수: s 플래그 또는 inline (?s). 없으면 패턴이 멀티라인 입력의 \n 마다 멈춰 — "내 정규식이 한 줄에선 되는데 두 줄에선 안 됨" 의 고전적 원인.

점은 greedy 한 친구

quantifier (트랙 3) 와 결합하면 .* 는 "어떤 글자, 0번 이상." 정규식 전체에서 가장 강력하고 가장 위험한 조합. .* 는 backtrack 전에 파일 전체를 기쁘게 먹어. 거의 항상 lazy quantifier (.*?) 또는 character class ([^"]*) 를 대신 써. Quantifier 트랙에서 여러 강 할애.

Code

점의 quirk·python
import re

# 점은 어떤 글자든 매칭... 줄바꿈만 제외
re.findall(r'.', 'a\nb\nc')
# ['a', 'b', 'c']  — 줄바꿈 스킵

# DOTALL 플래그면 점이 줄바꿈도 매칭
re.findall(r'.', 'a\nb\nc', re.DOTALL)
# ['a', '\n', 'b', '\n', 'c']

# Inline DOTALL
re.findall(r'(?s).', 'a\nb')
# ['a', '\n', 'b']

# 리터럴 점 — escape
re.findall(r'\.', 'version 3.14')
# ['.']

External links

Exercise

Hello\nWorld

를 패턴

(.+)

로 매칭 시도. 매칭돼? 이제 DOTALL 켜. 비교. 그 다음 portable 대안

([\s\S]+)

를 DOTALL 없이. 세 동작 다 이해돼야 해.

Progress

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

댓글 0

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

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