본문 바로가기
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

기호 하나로 거의 모든 글자

.줄바꿈을 제외한 글자 한 개를 매칭해. 모두가 잊고 실서비스에서 한 번씩 물리는 부분은 바로 "줄바꿈 제외"야.

패턴 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 플래그나 인라인 (?s)를 써. 이 플래그가 없으면 여러 줄 입력에서 \n마다 멈춰. "한 줄에서는 되는데 두 줄에서는 실패해"라는 고전적인 버그가 여기서 나와.

점은 탐욕적인 친구야

트랙 3에서 배울 수량자와 결합한 .*는 "아무 글자나 0번 이상"이라는 뜻이야. 강력하지만 위험해. 백트래킹하기 전에 입력을 끝까지 먹으려 하거든. 경계가 보인다면 게으른 .*?나 부정형 문자 클래스 [^"]*가 더 나은지 먼저 확인해.

Code

점의 독특한 점·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

<p>Hello\nWorld</p><p>(.+)</p>로 매칭해 보고 결과를 확인해. 그런 다음 DOTALL을 켠 결과와, DOTALL 없이 <p>([\s\S]+)</p>를 사용한 결과를 비교해. 세 패턴이 줄바꿈을 어떻게 다루는지 설명할 수 있어야 해.

Progress

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

댓글 0

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

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