기본 문자 클래스

\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: (?<=...) 뒤쪽 확인, (?<!...) 부정 뒤쪽 확인
  • 이스케이프: 특수문자 . * + ? ^ $ ( ) [ ] | \\로 이스케이프

관련 도구