정규식 가이드
정규표현식의 핵심 문법을 예제와 함께 익히세요.
아래 테스터로 직접 패턴을 시험해볼 수 있습니다.
인터랙티브 테스터
정규식 패턴을 입력하고 아래 텍스트에서 매칭 결과를 실시간으로 확인하세요.
/
/
테스트 텍스트
매칭 결과 (노란색 = 매칭된 부분)
빠른 예제:
매칭된 텍스트 목록
패턴을 입력하세요
정규식 치트시트
기본 문자
특수한 의미를 갖는 기본 메타문자들입니다.
| 패턴 | 의미 | 예시 |
|---|---|---|
. | 임의의 문자 하나 (줄바꿈 제외) | c.t → cat, c1t, c-t |
\d | 숫자 (0–9) | \d\d → 42, 07 |
\D | 숫자가 아닌 문자 | \D+ → hello, 안녕 |
\w | 단어 문자 (a-z, A-Z, 0-9, _) | \w+ → hello_1 |
\W | 단어 문자가 아닌 것 | \W → !, @, 공백 |
\s | 공백 문자 (스페이스, 탭, 줄바꿈) | a\sb → a b |
\S | 공백이 아닌 문자 | \S+ → hello |
\\ | 이스케이프 (특수문자를 문자 그대로) | \. → 점(.) |
문자 클래스 [ ]
대괄호 안에 원하는 문자 집합을 정의합니다.
| 패턴 | 의미 | 예시 |
|---|---|---|
[abc] | a, b, c 중 하나 | [aeiou] → 모음 하나 |
[^abc] | a, b, c를 제외한 문자 | [^0-9] → 숫자 제외 |
[a-z] | a부터 z까지 범위 | [a-zA-Z] → 영문자 |
[0-9] | 0부터 9까지 범위 | [0-9]+ = \d+ |
[가-힣] | 한글 완성형 문자 | [가-힣]+ → 안녕 |
[ㄱ-ㅎ] | 한글 자음 | [ㄱ-ㅎ] → ㄱ, ㄴ, ㅎ |
앵커 (위치 지정)
문자를 매칭하는 게 아니라 위치를 지정합니다.
| 패턴 | 의미 | 예시 |
|---|---|---|
^ | 문자열(줄)의 시작 | ^hello → "hello world"의 앞 |
$ | 문자열(줄)의 끝 | world$ → "hello world"의 끝 |
\b | 단어 경계 | \bcat\b → cat (concatenate는 X) |
\B | 단어 경계가 아닌 곳 | \Bcat\B → concatenate |
💡
m 플래그를 쓰면 ^/$가 각 줄의 시작/끝에 적용됩니다.수량자 (반복 횟수)
앞의 패턴이 몇 번 반복되는지 지정합니다. 기본은 탐욕적(greedy), 뒤에 ?를 붙이면 게으른(lazy) 매칭.
| 패턴 | 의미 | 예시 |
|---|---|---|
* | 0회 이상 | ab* → a, ab, abb, abbb |
+ | 1회 이상 | ab+ → ab, abb (a는 X) |
? | 0 또는 1회 | colou?r → color, colour |
{n} | 정확히 n회 | \d{4} → 2024 |
{n,} | n회 이상 | \d{2,} → 12, 123, 1234 |
{n,m} | n회 이상 m회 이하 | \d{2,4} → 12~1234 |
*? +? | 게으른 매칭 (최소한으로) | <.+?> → 첫 태그만 매칭 |
그룹과 OR
패턴을 묶거나 여러 선택지 중 하나를 매칭합니다.
| 패턴 | 의미 | 예시 |
|---|---|---|
(abc) | 캡처 그룹 | (ha)+ → ha, haha, hahaha |
(?:abc) | 비캡처 그룹 (묶기만, 저장 X) | (?:ab)+ → ab, abab |
a|b | a 또는 b | cat|dog → cat 또는 dog |
(a|b)c | 그룹 내 OR | (jpg|png|gif) → 확장자 선택 |
\1 | 1번 캡처 그룹 역참조 | (\w)\1 → aa, bb (반복 문자) |
Lookahead / Lookbehind
특정 패턴의 앞/뒤 조건을 확인하지만 매칭 결과에는 포함되지 않습니다.
| 패턴 | 의미 | 예시 |
|---|---|---|
(?=abc) | 앞에 abc가 오는 위치 (긍정 전방탐색) | \d+(?=원) → "100원"에서 100 |
(?!abc) | 앞에 abc가 오지 않는 위치 (부정 전방탐색) | \d+(?!px) → px가 아닌 숫자 |
(?<=abc) | 뒤에 abc가 있는 위치 (긍정 후방탐색) | (?<=\$)\d+ → "$100"에서 100 |
(?<!abc) | 뒤에 abc가 없는 위치 (부정 후방탐색) | (?<!\d)\d{3} → 단독 3자리 숫자 |
💡 Lookahead/Lookbehind는 위치를 검사할 뿐 소비하지 않습니다. 따라서 매칭 문자열에 포함되지 않습니다.
플래그
정규식의 동작 방식을 변경합니다. /패턴/플래그 형태로 사용.
| 플래그 | 의미 | 예시 |
|---|---|---|
g | 전역 검색 — 첫 번째 매칭에서 멈추지 않고 전부 찾기 | /\d+/g → 모든 숫자 |
i | 대소문자 무시 | /hello/i → Hello, HELLO, hello |
m | 멀티라인 — ^/$이 각 줄의 시작/끝에 적용 | /^\d/m → 각 줄의 시작 숫자 |
s | dotAll — .이 줄바꿈(\n)도 매칭 | /.+/s → 여러 줄도 매칭 |
자주 쓰는 실전 패턴
실무에서 바로 활용할 수 있는 패턴 모음입니다.
| 용도 | 패턴 |
|---|---|
| 이메일 | [\w.+-]+@[\w-]+\.[a-z]{2,} |
| 한국 휴대폰 | 01[0-9]-\d{3,4}-\d{4} |
| 날짜 (YYYY-MM-DD) | \d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]) |
| IPv4 주소 | ((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?) |
| URL (http/https) | https?://[\w-]+(\.[\w-]+)+(\/[^\s]*)? |
| 한글만 | [가-힣]+ |
| HTML 태그 | <[^>]+> |
| 비밀번호 (대소문자+숫자+특수문자 8자+) | (?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,} |
| 숫자만 | ^\d+$ |
| 앞뒤 공백 제거 (trim) | ^\s+|\s+$ |
배운 내용을 문제로 연습해보세요!
문제 풀러 가기 →