SQL
정규 표현식
야하루
2025. 5. 7. 22:18
정규 표현식
❖ 1. Anchors (위치 지정자)
표현 | 의미 | 예시 | 설명 |
^ | 문자열 또는 줄의 시작 | ^Hello → "Hello world"는 매칭됨 | ^는 문자열이 "Hello"로 시작할 때만 매칭됩니다 |
$ | 문자열 또는 줄의 끝 | end$ → "the end"는 매칭됨 | $는 해당 문자열이 특정 단어로 끝나야 매칭됨을 의미합니다 |
\A | 문자열 전체의 시작 | \AStart | 줄 바꿈이 있어도 전체 문자열의 시작만 매칭됩니다 |
\Z | 문자열 전체의 끝 | End\Z | \Z는 전체 문자열이 이 단어로 끝나야만 매칭됩니다 |
\b | 단어 경계 | \bcat\b → "a cat runs"는 매칭, "catch"는 ❌ | 단어가 독립적으로 있을 때만 매칭 (공백, 구두점 등 기준) |
\B | 비-단어 경계 | \Bcat → "bobcat"은 매칭, "cat"은 ❌ | 단어 내부일 때만 매칭됨 |
=> \가 들어가는 경우는 모두 \\으로 백슬래시를 두번 적어야한다.
❖ 2. Character Classes (문자 클래스)
표현 | 의미 | 예시 | 설명 |
\d | 숫자 (0~9) | \d+ → "abc123"에서 "123" 매칭 | 숫자 하나 이상을 의미합니다 |
\D | 숫자가 아님 | \D+ → "abc123"에서 "abc" 매칭 | 숫자를 제외한 문자를 매칭합니다 |
\w | 단어 문자 (영어, 숫자, _) | \w+ → "abc_123" 전체 매칭 | 변수명이나 태그 등에 자주 사용 |
\W | 단어 문자가 아님 | \W+ → "hello!"에서 "!" 매칭 | 특수 문자, 공백 등을 매칭합니다 |
\s | 공백 문자 (스페이스, 탭 등) | \s+ → "a b"에서 공백 매칭 | 여러 종류의 공백을 하나로 처리할 수 있습니다 |
\S | 공백 아님 | \S+ → "a b"에서 "a"와 "b" 매칭 | 단어 또는 기호 등 비공백을 매칭합니다 |
. | 임의의 단일 문자 | "a.c" -> "abc", "a1c", "a_c" 등 | a와 c 사이에 어떤 문자든 한 글자가 오는 문자열을 모두 매칭합니다. |
[a-z] | 소문자 알파벳 | [a-z]+ → "abc" 매칭 | 특정 문자 범위를 직접 지정할 수 있습니다 |
[A-Z] | 대문자 알파벳 | [A-Z]+ → "ABC" 매칭 | 대소문자 구분이 필요할 때 사용합니다 |
[0-9] | 숫자 0~9 | [0-9]{3} → "123" 매칭 | 숫자만 필터링하거나 길이 제한 시 사용 |
[^abc] | a, b, c 제외 문자 | [^abc]+ → "xyz" 매칭 | 괄호 안 문자를 제외한 문자 매칭 |
❖ 3. Groups and Assertions (그룹과 조건)
표현 | 의미 | 예시 | 설명 |
(abc) | 그룹화 및 캡처 | (ha)+ → "hahaha" 매칭 | 패턴 반복 또는 치환 시 그룹 단위 지정 |
(?:abc) | 비캡처 그룹 | (?:ha)+ → "hahaha" 매칭 | 캡처가 필요 없을 때 사용 |
(?=abc) | 긍정형 전방탐색 (앞에 abc가 있어야 함) | \d(?=%) → "20%"에서 "20" 매칭 | 조건부 매칭, 추출 시 유용 |
(?!abc) | 부정형 전방탐색 (abc가 오면 매칭 안됨) | \d(?!%) → "20$" 매칭, "20%"는 제외 | 제외 조건 설정 가능 |
(?<=abc) | 긍정형 후방탐색 | (?<=#)\w+ → "#topic"에서 "topic" 추출 | 특정 문자열 다음 값 추출할 때 |
(?<!abc) | 부정형 후방탐색 | (?<!@)\w+ → "email" 매칭, "@user"는 제외 | 특정 문자열이 앞에 없는 경우 매칭 |
❖ 4. Quantifiers (수량자)
표현 | 의미 | 예시 | 설명 |
* | 0회 이상 반복 | go* → "g", "go", "gooo" 매칭 | *는 해당 문자가 있거나 없거나, 여러 번 나와도 모두 매칭합니다 |
+ | 1회 이상 반복 | lo+l → "lol", "lool" 매칭 | 최소 1번 이상 있어야 하며, 많아도 상관없습니다 |
? | 0 또는 1회 | colou?r → "color", "colour" 매칭 | 옵션 문자를 만들고 싶을 때 사용합니다 |
{n} | 정확히 n회 반복 | \d{4} → "2023" 매칭 | 숫자 4자리를 강제하고 싶을 때 사용 |
{n,} | n회 이상 반복 | a{2,} → "aa", "aaa" 매칭 | n회 이상이라면 몇 번이든 허용 |
{n,m} | n~m회 반복 | a{2,4} → "aa", "aaa", "aaaa" 매칭 | 반복 횟수에 상한을 두고 싶을 때 |
❖ 5. Escape Sequences (이스케이프 문자)
표현 | 의미 | 설명 |
\n | 줄바꿈 문자 (newline) | 개행 문자를 매칭할 때 사용. 예: 문자열 분리 시 유용 |
\t | 탭 문자 (tab) | 들여쓰기나 탭으로 구분된 데이터를 처리할 때 유용 |
\r | 캐리지 리턴 | 오래된 윈도우 형식 파일에서 줄 바꿈 전에 사용 |
\Q...\E | 리터럴 구간 | \Q.*+?^$\E → 특수 문자도 전부 일반 문자처럼 처리됨 |
\(표현) | 정규표현식 특수문자를 문자 그대로 인식 | 문자 그대로 인식시키고 싶다면, 이스케이프(escape) 처리를 해줘야 합니다. ex. \. -> .을 문자 그대로 인식 |
\\ | 백슬래시 자체 | 정규식에서 \는 이스케이프 문자이기 때문에, 실제 백슬래시를 표현하려면 \\로 써야 합니다 |
=> \가 들어가는 경우는 모두 \\으로 백슬래시를 두번 적어야한다.
❖ 6. Pattern Modifiers (플래그)
표현 | 의미 | 설명 |
g | 전역 검색 (global) | 문자열 전체에서 모든 매칭을 찾음. 없으면 첫 매칭 하나만 리턴됨 |
i | 대소문자 구분 없음 | abc는 ABC, AbC 등 어떤 형태로든 매칭됨 |
m | 멀티라인 모드 | ^, $가 문자열 전체가 아닌 각 줄 기준으로 동작함 |
s | 줄바꿈 포함 (dot-all) | .이 기본적으로 줄바꿈(\n)을 제외하는데, 이 플래그를 쓰면 포함함 |
x | 공백/주석 허용 | 복잡한 정규식에 주석과 들여쓰기를 포함 가능. 가독성 향상용 |
U | 비탐욕 모드 전환 | 기본 탐욕적 수량자 동작을 **비탐욕(non-greedy)**으로 바꿔줌 |
❖ 7. String Replacement (치환용 특수 기호)
표현 | 의미 | 예시 | 설명 |
$1, $2, ... | 캡처 그룹 참조 | /(\w+)-(\d+)/ → $2-$1 | 그룹 1은 단어, 그룹 2는 숫자. 순서 바꿔 출력할 수 있음 |
$& | 전체 매칭된 문자열 | s/fox/$&es/ → "fox" → "foxes" | 매칭된 부분을 기준으로 추가 또는 수정할 때 사용 |
`$`` | 매칭된 문자열 앞부분 | abc123에서 숫자를 찾고 앞부분만 출력 | |
$' | 매칭된 문자열 뒷부분 | abc123에서 숫자를 찾고 뒷부분만 출력 |
정규 표현식 예시
📌 이메일 주소
^[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자리 이상의 도메인 확장자 (com, net 등)
- $ : 문자열 끝
- ✅ 예: test.email+1@example.co.kr
📌 휴대폰 번호 (한국)
^01[016789]-\d{3,4}-\d{4}$
- 01[016789] : 010, 011, 016~019 번호대
- \d{3,4} : 중간 번호는 3자리 또는 4자리
- \d{4} : 마지막 번호는 항상 4자리
- ✅ 예: 010-1234-5678
📌 날짜 (YYYY-MM-DD)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$
- 연도: \d{4} (숫자 4자리)
- 월: 0[1-9](1~9월) 또는 1[0-2](10~12월)
- 일: 01~31 범위 내에서 매칭
- ✅ 예: 2024-12-31
📌 카드 번호 (16자리, 4자리씩 나눔)
^\d{4}-\d{4}-\d{4}-\d{4}$
- 각 블록: \d{4} = 숫자 4자리
- 하이픈으로 구분된 4개 그룹
- ✅ 예: 1234-5678-1234-0000
📌 주민등록번호 (앞6자리-뒤7자리)
^\d{6}-[1-4]\d{6}$
- 생년월일: \d{6} (YYMMDD)
- 성별코드: 1~4
- 나머지: \d{6}
- ✅ 예: 900101-1234567
📌 영수증 번호 (영문+숫자 조합, 대문자 시작, 총 10자리)
^[A-Z]{2}\d{8}$
- 대문자 2자리: [A-Z]{2} (예: AB)
- 숫자 8자리: \d{8}
- ✅ 예: AB12345678
📌 숫자만 포함된 문자열
^\d+$
- \d+ : 숫자 1자리 이상
- 전체가 숫자로만 이루어진 경우 매칭
- ✅ 예: 1234567890
📌 HTML 태그 추출
<[^>]+>
- < 로 시작해서 >로 끝나는 문자열
- 중간에는 >가 아닌 문자 아무거나 반복
- ✅ 예: <div>, <a href="link">