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

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

만만치 않은 정규식을 코드에 바로 넣는 건 SQL REPL 없이 쿼리를 디버깅하는 것과 같아. 할 수는 있지만 굳이 고생할 이유가 없어.

좋은 습관은 단순해. 테스터에서 패턴을 만들고, 동작을 확인한 뒤 코드에 붙여 넣어.

알아둘 만한 테스터

regex101.com. 사실상 표준이야. PCRE2, Python, JavaScript, Go 중 엔진 방언을 고르고 패턴과 테스트 문자열을 붙여 넣으면 실시간 강조, 이름 붙은 그룹 분해, 단계별 설명을 볼 수 있어. 무료고 기본 기능에는 로그인도 필요 없어.

regexr.com. 화면은 더 친근하고 설명은 조금 가벼워. 빠르게 확인하기 좋아.

debuggex.com. 패턴을 철도 노선처럼 시각화해. 4강의 상태 기계를 눈으로 보고 싶거나 복잡한 패턴을 *이해*하려 할 때 유용해.

도구 안에서 바로 확인하기

터미널에서 작업한다면 다음 세 가지면 충분해.

  • rg --debug 'PAT' file — ripgrep이 패턴과 검색을 어떻게 구성하는지 디버그 로그로 확인해.
  • Python REPL의 import re; re.findall(r'PAT', text) — Python이 주력이라면 가장 빠른 샌드박스야.
  • echo "input" | grep -E 'PAT' — POSIX ERE 동작만 빠르게 확인해.

패턴은 조금씩 키워

완벽한 80자 패턴을 한 번에 쓰려고 하지 마. 예시 하나에 맞는 가장 단순한 버전부터 시작해. 조건을 하나 추가하고 테스트한 다음, 경계 사례를 하나 추가하고 다시 테스트해. 패턴은 완성된 청사진이 아니라 씨앗에서 자라.

Code

Python REPL에서 점진적 패턴 빌드·python
>>> import re
>>> text = 'Order #42-1138 placed on 2026-05-04'
>>> # 1단계: 주문번호 첫 부분만
>>> re.findall(r'#\d+', text)
['#42']
>>> # 2단계: 하이픈과 두 번째 숫자까지 포함
>>> re.findall(r'#\d+-\d+', text)
['#42-1138']
>>> # 3단계: 두 부분을 따로 캡처
>>> re.findall(r'#(\d+)-(\d+)', text)
[('42', '1138')]

External links

Exercise

코드베이스에서 가장 복잡한 정규식 하나를 골라. re.compile, RegExp, .match(/를 검색하면 돼. 실제 코드와 같은 엔진 방언으로 regex101에 붙여 넣고 설명 패널을 읽어봐. 그 패턴을 *전부* 이해하고 있었는지 확인해. 짐작으로 넘겼던 조각이 적어도 하나는 보일 거야.

Progress

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

댓글 0

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

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