C.W.K.
Stream
Lesson 06 of 10 · published

테스팅 도구 — 정규식 현미경

~8 min · tools, regex101, debuggex

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

샌드박스 없이 정규식 쓰지 마

non-trivial 정규식을 코드에 바로 박는 건 SQL REPL 없이 쿼리 디버깅하는 거랑 같아. 할 순 있어. 하지 마.

프로 습관: 테스터에서 패턴 빌드, 동작하면 코드에 붙여 넣기.

알아둘 만한 테스터 셋

regex101.com — 표준. flavor 선택 (PCRE2, Python, JavaScript, Go), 패턴 붙여 넣기, 테스트 문자열 붙여 넣기, 실시간 하이라이팅, named group 분해, 단계별 설명, 엔진 state 걷는 디버거. 무료. 기본 사용엔 로그인 불필요.

regexr.com — UI 더 친근, 디테일은 좀 적음. 빠른 체크에 좋음.

debuggex.com — 패턴을 railroad diagram 으로 시각화 (4강의 state machine 을 눈에 보이게). 복잡한 패턴 *이해* 하려고 할 때 (테스트만이 아니라) 유용.

내장 대안들

터미널에서 산다면 테스터는 둘 중 하나:

  • rg --debug 'PAT' file — RE2 가 뭘 생각하는지 보기.
  • Python REPL: import re; re.findall(r'PAT', text) — 파이썬이 데일리 드라이버면 가장 빠른 샌드박스.
  • echo "input" | grep -E 'PAT' — POSIX 한정 체크.

패턴은 점진적으로 빌드

완벽한 80자 패턴을 한 번에 쓰려고 하지 마. 예시 하나 매칭하는 가장 단순한 버전부터 시작. 조건 추가. 테스트. 엣지 케이스 추가. 테스트. 패턴은 청사진이 아니라 씨앗에서 자라.

Code

Python REPL 에서 점진적 패턴 빌드·python
>>> import re
>>> text = 'Order #42-1138 placed on 2026-05-04'
>>> # Step 1: order 번호 영역만
>>> re.findall(r'#\d+', text)
['#42']
>>> # Step 2: 대시 + 두 번째 숫자 포함
>>> re.findall(r'#\d+-\d+', text)
['#42-1138']
>>> # Step 3: 두 부분 따로 캡처
>>> re.findall(r'#(\d+)-(\d+)', text)
[('42', '1138')]

External links

Exercise

본인 코드베이스에서 가장 복잡한 정규식 하나 골라 (re.compile, RegExp, .match(/ 검색). 매칭하는 flavor 로 regex101 에 붙여 넣어. 설명 패널 읽어. 전에 그 패턴 *전부* 이해하고 있었어? 대부분 추측하고 있던 부분이 최소 하나 발견돼.

Progress

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

댓글 0

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

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