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 대소문자 구분 없음 abcABC, 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">