정규식 패턴 매칭 완벽 가이드
정규식(Regular Expression, Regex)은 문자열 패턴을 정의하고 검색하는 강력한 도구입니다. 복잡해 보이지만 한번 익숙해지면 텍스트 처리 작업을 획기적으로 빠르고 정확하게 만들어줍니다. 이 가이드에서는 정규식의 기본부터 실무 활용까지 체계적으로 알아보겠습니다.
1. 정규식의 기본 개념
정규식이란?
정규식은 문자열에서 특정 패턴을 찾기 위한 표현 방식입니다. 단순한 텍스트 검색을 넘어서 복잡한 패턴을 정의할 수 있어 다음과 같은 작업에 활용됩니다:
- 데이터 검증: 이메일, 전화번호, 날짜 형식 확인
- 텍스트 추출: 로그 파일에서 특정 정보 추출
- 문자열 치환: 패턴에 맞는 부분을 다른 문자열로 변경
- 분할: 특정 패턴을 기준으로 문자열 나누기
기본 문법 구조
/패턴/플래그
- 패턴: 찾고자 하는 문자열의 규칙
- 플래그: 검색 방식을 조정하는 옵션
주요 플래그
| 플래그 | 설명 | 예시 |
|---|---|---|
g | Global - 전역 검색 | 모든 매칭 결과 반환 |
i | Ignore case - 대소문자 무시 | Hello와 hello 모두 매칭 |
m | Multiline - 멀티라인 모드 | ^, $가 각 줄의 시작/끝 인식 |
s | Single line - 점(.)이 줄바꿈 포함 | .이 \n도 매칭 |
u | Unicode - 유니코드 모드 | 유니코드 문자 올바른 처리 |
y | Sticky - 고정 위치 매칭 | lastIndex부터 연속 매칭 |
기본 문자 클래스
| 패턴 | 설명 | 매칭 예시 |
|---|---|---|
. | 줄바꿈 제외 모든 문자 | h.t → hat, hit, hot |
\d | 숫자 (0-9) | \d{4} → 2025, 1234 |
\w | 단어 문자 (a-z, A-Z, 0-9, _) | \w+ → hello, test_123 |
\s | 공백 문자 (스페이스, 탭, 줄바꿈) | \s+ → 연속된 공백들 |
\D | 비숫자 | \D+ → abc, hello! |
\W | 비단어 문자 | \W+ → !@#, --- |
\S | 비공백 문자 | \S+ → 공백이 아닌 연속 문자 |
수량자 (Quantifiers)
| 수량자 | 설명 | 예시 |
|---|---|---|
* | 0번 이상 반복 | ab* → a, ab, abbb |
+ | 1번 이상 반복 | ab+ → ab, abbb (단, a는 불매칭) |
? | 0번 또는 1번 | ab? → a, ab |
{n} | 정확히 n번 | a{3} → aaa |
{n,} | n번 이상 | a{2,} → aa, aaa, aaaa |
{n,m} | n번 이상 m번 이하 | a{2,4} → aa, aaa, aaaa |
앵커 (Anchors)
| 앵커 | 설명 | 예시 |
|---|---|---|
^ | 줄의 시작 | ^Hello → 줄 시작의 "Hello" |
$ | 줄의 끝 | World$ → 줄 끝의 "World" |
\b | 단어 경계 | \btest\b → 독립된 단어 "test" |
\B | 비단어 경계 | \Btest\B → 단어 내부의 "test" |
2. 실무 패턴 예시
이메일 주소 검증
기본 패턴:
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
상세 분석:
[a-zA-Z0-9._%+-]+: 사용자명 (영문, 숫자, 특수문자 허용)@: @ 기호 (필수)[a-zA-Z0-9.-]+: 도메인명\.: 점(.) 문자 (이스케이프 필요)[a-zA-Z]{2,}: 최상위 도메인 (2자 이상)
매칭 예시:
- ✅
user@example.com - ✅
test.email+tag@domain.co.kr - ❌
invalid.email - ❌
@domain.com
한국 전화번호
휴대폰 번호:
010-?\d{4}-?\d{4}
일반전화:
0\d{1,2}-?\d{3,4}-?\d{4}
통합 패턴:
(010|0\d{1,2})-?\d{3,4}-?\d{4}
URL 검증
기본 HTTP/HTTPS URL:
https?://[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?
도메인만:
[\w\-]+(\.[\w\-]+)+
날짜 형식
YYYY-MM-DD:
\d{4}-\d{2}-\d{2}
DD/MM/YYYY 또는 MM/DD/YYYY:
\d{2}/\d{2}/\d{4}
더 정확한 날짜 (월 1-12, 일 1-31):
\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])
비밀번호 강도 검증
최소 8자, 영문+숫자+특수문자 포함:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$
분석:
^: 문자열 시작(?=.*[a-z]): 소문자 포함 (전방탐색)(?=.*[A-Z]): 대문자 포함(?=.*\d): 숫자 포함(?=.*[@$!%*?&]): 특수문자 포함[A-Za-z\d@$!%*?&]{8,}: 허용 문자로 8자 이상$: 문자열 끝