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

앵커 — ^ 와 $

~8 min · anchors, start, end, multiline

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

매칭을 위치에 박기

앵커는 zero-width — 글자 소비 안 하고, 특정 위치에 있다고 주장만 함.

  • ^ — 문자열 시작 (또는 MULTILINE 플래그면 줄 시작)
  • $ — 문자열 끝 (MULTILINE 이면 줄 끝)

앵커 없으면 패턴이 어디든 매칭. ^pattern$ 으로 "입력 전체가 정확히 이 패턴" 이라 말함.

MULTILINE 플래그

기본적으로 ^$ 는 전체 문자열 시작/끝 매칭. re.MULTILINE (Python) 또는 m 플래그 (PCRE/JS) 면 모든 줄 시작/끝에서도 매칭. 멀티라인 입력 처리 (로그 파일, 멀티라인 사용자 입력 등) 에 중요.

Fullmatch 대안

Python 에서 re.fullmatch(pat, text)re.match(r"^" + pat + r"$", text) 의 shorthand. 전체 문자열이 패턴 매칭하는지 검증할 때 사용. 앵커 wrap 보다 명확하고 망치기 어려움.

\A 와 \Z 앵커

일부 flavor (Python, PCRE, .NET) 가 \A\Z절대 문자열 시작/끝으로 제공. MULTILINE 무시. 그래서 \A 는 항상 "입력 시작," 절대 "줄 시작" 아님. 플래그로 안 변하는 앵커링 원할 때 유용.

Code

앵커 실전·python
import re

# 'foo' 어디든
re.search(r'foo', 'foobar foo').group()  # 'foo'

# 'foo' 가 전체 문자열?
bool(re.fullmatch(r'foo', 'foo'))     # True
bool(re.fullmatch(r'foo', 'foobar'))  # False

# MULTILINE 으로 줄 단위
log = 'line one\nERROR: oops\nline three'
re.findall(r'^ERROR.*$', log, re.MULTILINE)
# ['ERROR: oops']

# MULTILINE 없이 — ERROR 가 맨 시작이어야 매칭
re.findall(r'^ERROR.*$', log)
# []

External links

Exercise

멀티라인 로그 잡고 다른 앵커 시나리오 셋: (1) *파일* 이 헤더로 시작? (2) 어느 줄이 'WARN' 으로 시작? (3) 어느 줄이 숫자로 끝? 각각에 대해 MULTILINE 필요 여부 결정.

Progress

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

댓글 0

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

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