정규식 기초 가이드 — 다이어그램으로 이해하는 정규식
업데이트 2026-06-20 · 일반 학습용 정보 · 자바스크립트(ECMAScript) 정규식 문법 기준
1. 정규식이란
정규식(Regular Expression, 정규 표현식)은 문자열에서 특정 패턴을 찾거나 검사·치환하기 위한 작은 언어입니다. 예를 들어 "숫자 네 자리-숫자 두 자리-숫자 두 자리" 형태의 날짜를 찾고 싶을 때\d{4}-\d{2}-\d{2} 라고 적으면 됩니다. 문제는 패턴이 조금만 길어져도 기호가 빽빽해져 사람이 한눈에 읽기 어렵다는 점입니다. 이 도구는 정규식을 railroad(철도) 다이어그램으로 그려 구조를 시각적으로 보여주고, 각 기호의 의미를 한국어로 풀어 줍니다.
정규식 문법은 언어마다 미세하게 다르지만, 이 도구는 웹에서 가장 널리 쓰이는 자바스크립트(ECMAScript) 정규식을 기준으로 합니다. 대부분의 기본 문법은 Python, Java, Go 등에서도 거의 동일하게 통합니다.
2. railroad 다이어그램 읽는 법
railroad 다이어그램은 정규식이 매칭되는 흐름을 왼쪽에서 오른쪽으로 이어지는 철로처럼 표현합니다. 왼쪽의 원에서 출발해 오른쪽 원에 도착하면 매칭이 성립합니다.
- 상자: 하나의 토큰(문자, 문자클래스, 단축표기 등). 상자 안의 글자가 매칭 대상입니다.
- 가로선: 토큰을 순서대로 이어 줍니다. 왼쪽 상자를 통과한 뒤 오른쪽 상자로 진행합니다.
- 갈라지는 선(분기): 대안(
|)입니다. 여러 갈래 중 하나만 통과하면 됩니다. - 위로 넘어가는 선: 건너뛰기. 해당 토큰이 없어도 되는 경우(
?,*)입니다. - 아래로 되돌아오는 고리: 반복. 같은 토큰을 여러 번 통과할 수 있습니다(
+,*). - 점선 사각형: 그룹입니다. 라벨에 캡처 그룹 번호나 전/후방탐색 종류가 표시됩니다.
3. 문자와 문자클래스
가장 기본은 리터럴 문자입니다. cat 은 글자 c, a, t 가 순서대로 나오는 부분을 찾습니다. 여러 후보 중 하나를 찾을 때는 문자클래스 [...] 를 씁니다.
[abc]— a, b, c 중 한 글자[a-z]— 소문자 a부터 z까지 중 한 글자(범위)[0-9가-힣]— 숫자 또는 한글 한 글자[^0-9]— 숫자가 아닌 한 글자(맨 앞^는 부정)
자주 쓰는 집합은 단축표기로 줄여 씁니다. \d 는 숫자([0-9]),\w 는 단어 문자(영문·숫자·밑줄), \s 는 공백입니다. 대문자\D, \W, \S 는 각각의 반대(부정)를 뜻합니다. 그리고 .(점)은 줄바꿈을 제외한 아무 문자 한 글자를 의미합니다.
4. 수량자 — 몇 번 반복할까
토큰 뒤에 붙는 수량자는 앞 토큰이 몇 번 반복되는지를 정합니다.
| 기호 | 의미 | 예시 |
|---|---|---|
| * | 0개 이상(없어도 됨) | a* → "", "a", "aaa" |
| + | 1개 이상 | \d+ → "5", "2026" |
| ? | 0개 또는 1개(선택) | https? → "http", "https" |
| {n} | 정확히 n개 | \d{4} → "2026" |
| {n,m} | n개 이상 m개 이하 | \d{2,4} → "12"~"1234" |
수량자 뒤에 ? 를 한 번 더 붙이면 게으른(lazy) 매칭이 됩니다. 기본은 최대한 길게 가져가는 탐욕적(greedy) 매칭이라, 예컨대 <.+> 는 한 줄 전체를 삼킬 수 있지만 <.+?> 는 가장 짧은 <...> 하나만 잡습니다.
5. 그룹과 캡처
소괄호 (...) 는 여러 토큰을 하나로 묶고, 매칭된 부분을 따로 저장하는 캡처 그룹을 만듭니다. 예를 들어 (\d{4})-(\d{2})-(\d{2}) 은 연·월·일을 각각 1번, 2번, 3번 그룹으로 추출합니다.
(...)— 캡처 그룹(번호 자동 부여)(?:...)— 묶기만 하고 캡처는 안 함(비캡처 그룹)(?<name>...)— 이름 있는 캡처 그룹(?=...)/(?!...)— 긍정·부정 전방탐색(뒤에 무엇이 오는지 확인만)(?<=...)/(?<!...)— 긍정·부정 후방탐색(앞에 무엇이 있는지 확인만)
전·후방탐색은 조건만 검사하고 실제 글자를 소비하지 않는 것이 특징입니다. 비밀번호 규칙처럼 "숫자를 포함해야 한다"는 조건을 (?=.*\d) 로 표현할 때 자주 씁니다.
6. 앵커와 대안
앵커는 글자가 아니라 위치를 가리킵니다. ^ 는 문자열(또는 줄)의 시작,$ 는 끝, \b 는 단어 경계를 뜻합니다. ^\d{5}$ 처럼 앞뒤를 앵커로 묶으면 "전체가 숫자 다섯 자리"인지 정확히 검사할 수 있습니다. 대안 | 은 "또는"입니다. cat|dog 는 cat 또는 dog 를 찾습니다.
7. 플래그(옵션)
정규식 끝에 붙는 플래그로 동작을 조절합니다. g 는 전역(모든 매칭),i 는 대소문자 무시, m 은 여러 줄(^$ 가 각 줄에 적용),s 는 점(.)이 줄바꿈까지 포함, u 는 유니코드 모드입니다. 이 도구의 플래그 버튼으로 켜고 끄며 결과 변화를 바로 확인할 수 있습니다.
8. 자주 쓰는 한국어 패턴 예제
- 이메일:
[\w.+-]+@[\w-]+\.[\w.-]+ - 한국 휴대폰:
01[016789]-?\d{3,4}-?\d{4} - 우편번호(5자리):
\b\d{5}\b - 날짜:
(\d{4})-(\d{2})-(\d{2}) - 한글 단어:
[가-힣]+
홈 화면의 예제 버튼을 누르면 위 패턴과 샘플 문자열이 바로 채워집니다. 다이어그램과 설명을 비교하며 기호 하나하나가 그림의 어느 부분에 대응하는지 익혀 보세요.