정규식 문법 정리

정규표현식 문법과 주요 패턴을 정리한 치트시트입니다.

60개 패턴

기본 메타문자

패턴설명예시
.
임의의 한 문자 (줄바꿈 제외)a.c → abc, a1c, a c
^
문자열/줄의 시작^Hello → Hello로 시작하는 줄
$
문자열/줄의 끝end$ → end로 끝나는 줄
\
특수 문자 이스케이프\. → 리터럴 점(.)
|
OR 연산cat|dog → cat 또는 dog
()
그룹 캡처(ab)+ → ab, abab
(?:)
비캡처 그룹(?:ab)+ → 그룹화만, 캡처 안함

수량자 (Quantifiers)

패턴설명예시
*
0회 이상 반복 (탐욕적)ab*c → ac, abc, abbc
+
1회 이상 반복 (탐욕적)ab+c → abc, abbc (ac는 ×)
?
0회 또는 1회colou?r → color, colour
{n}
정확히 n회 반복a{3} → aaa
{n,}
n회 이상 반복a{2,} → aa, aaa, aaaa...
{n,m}
n회 이상 m회 이하a{2,4} → aa, aaa, aaaa
*?
0회 이상 (게으른/최소 매칭)<.*?> → 각 태그 개별 매칭
+?
1회 이상 (게으른/최소 매칭).+? → 가능한 적게 매칭
??
0 또는 1회 (게으른)a?? → 빈 문자열 우선 매칭

문자 클래스

패턴설명예시
[abc]
a, b, c 중 하나[aeiou] → 모음 한 글자
[^abc]
a, b, c를 제외한 문자[^0-9] → 숫자가 아닌 문자
[a-z]
소문자 범위[a-zA-Z] → 영문자
[0-9]
숫자 범위[0-9]+ → 하나 이상의 숫자
\d
숫자 [0-9]\d{3} → 세 자리 숫자
\D
숫자가 아닌 문자 [^0-9]\D+ → 숫자가 아닌 연속 문자
\w
단어 문자 [a-zA-Z0-9_]\w+ → 변수명 등 단어
\W
단어 문자가 아닌 것 [^a-zA-Z0-9_]\W → 특수문자, 공백
\s
공백 문자 (스페이스, 탭, 줄바꿈)\s+ → 연속 공백
\S
공백이 아닌 문자\S+ → 공백 아닌 연속 문자
\b
단어 경계 (위치)\bword\b → 독립된 단어만
\B
단어 경계가 아닌 곳 (위치)\Bword → 단어 내부의 word

전후방 탐색 (Lookaround)

패턴설명예시
(?=...)
전방 탐색 (Positive Lookahead)\d(?=px) → px 앞의 숫자
(?!...)
부정 전방 탐색 (Negative Lookahead)\d(?!px) → px 앞이 아닌 숫자
(?<=...)
후방 탐색 (Positive Lookbehind)(?<=\$)\d+ → $ 뒤의 숫자
(?<!...)
부정 후방 탐색 (Negative Lookbehind)(?<!\$)\d+ → $ 뒤가 아닌 숫자

그룹 & 역참조

패턴설명예시
(abc)
캡처 그룹(\d+)-(\d+) → $1, $2로 참조
(?:abc)
비캡처 그룹 (성능 향상)(?:https?://) → 캡처 안함
(?<name>abc)
이름 있는 캡처 그룹(?<year>\d{4}) → $<year>
\1
역참조 (첫 번째 그룹)(\w+)\s\1 → hello hello
$1 또는 \1
치환 시 그룹 참조s/(\w+)/[$1]/g

플래그 (Flags)

패턴설명예시
g
전역 검색 (모든 매치 찾기)/pattern/g
i
대소문자 무시/hello/i → Hello, HELLO 매칭
m
여러 줄 모드 (^, $ 각 줄 적용)/^start/m → 각 줄의 start
s
dotAll (.이 줄바꿈도 매칭)/a.b/s → a\nb도 매칭
u
유니코드 지원/\p{Hangul}/u → 한글 매칭
y
sticky (lastIndex부터만 검색)/\d+/y

자주 쓰는 패턴

패턴설명예시
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
이메일 주소 검증
^https?:\/\/(www\.)?[\w.-]+\.[a-zA-Z]{2,}
URL (http/https)
^01[016789]-?\d{3,4}-?\d{4}$
한국 휴대전화번호
^\d{2,3}-?\d{3,4}-?\d{4}$
한국 전화번호 (일반)
^\d{3}-?\d{2}-?\d{5}$
사업자등록번호
^\d{6}-?[1-4]\d{6}$
주민등록번호
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$
날짜 (YYYY-MM-DD)
^(0[1-9]|1[0-2]):(0[0-9]|[1-5]\d)$
시간 (HH:mm, 24시)
^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$
HEX 색상코드 (#fff, #ffffff)
^-?\d+(\.\d+)?$
정수 또는 소수 (음수 포함)
^\d{1,3}(\.\d{1,3}){3}$
IPv4 주소 (기본)
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d@$!%*?&]{8,}$
비밀번호 (영문+숫자, 8자 이상)
<[^>]+>
HTML 태그 매칭
<(\w+)[^>]*>.*?<\/\1>
HTML 여닫는 태그 쌍
^\s+|\s+$
앞뒤 공백 (trim 용도)
\b\w+\b
단어 추출 (단어 경계 사용)
(\d{1,3})(,\d{3})*
천 단위 콤마 숫자 (1,000,000)

자주 묻는 질문

정규표현식이란 무엇인가요?
정규표현식(Regular Expression, Regex)은 문자열에서 특정 패턴을 검색, 매칭, 치환하기 위한 문법입니다. JavaScript, Python, Java, Go, PHP 등 대부분의 프로그래밍 언어와 텍스트 에디터에서 지원됩니다.
탐욕적(Greedy)과 게으른(Lazy) 매칭의 차이는 무엇인가요?
탐욕적 매칭(*, +)은 가능한 한 많이 매칭합니다. 게으른 매칭(*?, +?)은 가능한 한 적게 매칭합니다. 예를 들어 "<b>a</b><b>b</b>"에서 <.*>는 전체를 하나로 매칭하지만, <.*?>는 <b>, </b> 등 각 태그를 개별로 매칭합니다.
정규식에서 이메일을 어떻게 검증하나요?
간단한 이메일 패턴은 ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$입니다. 다만 RFC 5322 표준에 완벽히 부합하는 이메일 검증은 정규식만으로는 매우 복잡하므로, 실제 서비스에서는 전용 라이브러리 사용을 권장합니다.
Lookahead와 Lookbehind는 무엇인가요?
Lookahead (?=...)는 뒤에 특정 패턴이 오는 위치를 매칭하고, Lookbehind (?<=...)는 앞에 특정 패턴이 있는 위치를 매칭합니다. 실제 문자를 소비하지 않는 "제로폭 어설션"이므로 조건부 매칭에 유용합니다.
캡처 그룹과 비캡처 그룹의 차이는 무엇인가요?
캡처 그룹 ()은 매칭된 부분을 기억하여 $1, $2 등으로 역참조할 수 있습니다. 비캡처 그룹 (?:)은 그룹화만 하고 캡처하지 않아 역참조가 불가하지만, 성능이 약간 더 좋고 그룹 번호를 소비하지 않습니다.
정규식 플래그 g, i, m, s의 의미는 무엇인가요?
g(global)는 모든 매치를 찾고, i(case-insensitive)는 대소문자를 무시합니다. m(multiline)은 ^와 $를 각 줄에 적용하고, s(dotAll)는 .이 줄바꿈 문자도 매칭하게 합니다.
한국어(한글) 정규식은 어떻게 작성하나요?
JavaScript에서 유니코드 플래그(u)와 함께 /\p{Script=Hangul}/u를 사용하거나, 유니코드 범위 [가-힣]으로 완성형 한글을, [ㄱ-ㅎㅏ-ㅣ가-힣]으로 자모 포함 한글을 매칭할 수 있습니다.

다른 도구