📖 정규식 치트시트
자주 사용하는 정규 표현식 패턴 모음
기본 문자 클래스
\d 숫자 (0-9)
예: 010-1234-5678
\w 단어 문자 (알파벳, 숫자, _)
예: user_name123
\s 공백 문자 (스페이스, 탭, 개행)
예: Hello World
. 임의의 한 문자 (개행 제외)
예: a.b → aab, abb
수량자 (Quantifiers)
* 0번 이상 반복
예: ab*c → ac, abc, abbc
+ 1번 이상 반복
예: ab+c → abc, abbc
? 0번 또는 1번
예: colou?r → color, colour
{3} 정확히 3번
예: \d{3} → 123
{3,5} 3번 이상 5번 이하
예: \d{3,5} → 123, 1234
{3,} 3번 이상
예: \d{3,} → 123, 1234...
위치 앵커
^ 줄의 시작
예: ^Hello
$ 줄의 끝
예: world$
\b 단어 경계
예: \bword\b
\B 단어 경계가 아님
예: \Bcat\B
그룹 및 캡처
(abc) 캡처 그룹
예: (\\d3)-(\\d4)
(?:abc) 비캡처 그룹
예: (?:http|https)://
a|b OR 조건 (a 또는 b)
예: cat|dog
[abc] 문자 클래스 (a, b, c 중 하나)
예: [aeiou]
[^abc] 부정 문자 클래스
예: [^0-9] (숫자 제외)
[a-z] 범위 (a부터 z까지)
예: [0-9A-F]
실전 패턴 예제
📧 이메일
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ✓ user@example.com, test.user+tag@domain.co.kr
📱 한국 전화번호
^01[0-9]-?\d{3,4}-?\d{4}$ ✓ 010-1234-5678, 01012345678
🔗 URL
^https?://[^\s/$.?#].[^\s]*$ ✓ https://example.com, http://sub.domain.com/path
📅 날짜 (YYYY-MM-DD)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$ ✓ 2024-01-15, 2024-12-31
🔢 숫자 (정수/소수)
^-?\d+(\.\d+)?$ ✓ 123, -45, 3.14, -0.5
🎨 HEX 색상 코드
^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$ ✓ #FF5733, #F57, FF5733
🆔 UUID
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ ✓ 550e8400-e29b-41d4-a716-446655440000
🔐 비밀번호 (8자 이상, 대소문자+숫자)
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$ ✓ Password123, Secure99
💳 신용카드 (기본 형식)
^\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}$ ✓ 1234-5678-9012-3456, 1234567890123456
🌏 IPv4 주소
^((25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]?\d)$ ✓ 192.168.0.1, 8.8.8.8
💡 Regex 팁
- Greedy vs Lazy:
.*는 최대한 매치 (greedy),.*?는 최소한 매치 (lazy) - 플래그:
i(대소문자 무시),g(전역 검색),m(멀티라인) - Lookahead:
(?=...)앞쪽 확인,(?!...)부정 앞쪽 확인 - Lookbehind:
(?<=...)뒤쪽 확인,(?<!...)부정 뒤쪽 확인 - 이스케이프: 특수문자
. * + ? ^ $ ( ) [ ] | \는\로 이스케이프