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

Negated Class [^abc] — 제외 모두

~6 min · negation, character-class

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

첫 글자로 caret 은 'not'

[^abc]a / b / c 가 아닌 어떤 단일 글자든 매칭. 클래스 시작의 caret ^ 가 의미를 뒤집어 — "이거 제외 어떤 글자든."

정규식에서 진짜 가장 유용한 도구 중 하나. "따옴표 칠 때까지 매칭" → [^"]*. "숫자 아닌 거 다 스킵" → [^0-9]+. "공백 아닌 거 다" → [^\s]+ (또는 그냥 \S+, 7강).

Negated class 는 줄바꿈 매칭 (점과 달리)

이게 함정. [^x]x 가 아닌 모든 글자 매칭, \n 포함. DOTALL 없으면 점 . 는 줄바꿈에 멈추지만 negated class 는 안 멈춰. 그래서 [^"]* 는 멀티라인을 기쁘게 가로지르지만 .* 는 안 그래.

때론 원하는 거고 때론 아냐. 진짜 멀티라인인 따옴표 문자열 파싱이면 [^"]* 가 정확. "같은 줄의 따옴표까지" 원하면 [^"\n]*.

Caret 은 첫 위치에서만 특수

[a^b] 는 리터럴 클래스 "a, caret, b." Caret 은 대괄호 안 첫 글자일 때만 negation 연산자.

Code

Negated class 패턴·python
import re

# 따옴표 문자열 본문 매칭
re.findall(r'"([^"]*)"', 'name="Pippa" age="3"')
# ['Pippa', '3']

# 공백 아닌 거 다
re.findall(r'[^\s]+', 'hello world\tand\nfoo')
# ['hello', 'world', 'and', 'foo']

# Negated class 가 줄바꿈 가로지름
re.findall(r'[^x]+', 'abc\ndef\nxyz')
# ['abc\ndef\n']  — \n 기쁘게 포함

# Caret 위치 2+ 는 리터럴
re.findall(r'[a^b]', 'a^b^a')
# ['a', '^', 'b', '^', 'a']

External links

Exercise

negated class 사용해서 ... HTML 태그 본문 캡처하는 패턴 작성. 그 다음 .*? 로 똑같이. x and y 에 둘 다 돌려보고 어느 쪽이 원하는 매칭이고 왜인지 인지.

Progress

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

댓글 0

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

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