프로그래밍 언어/Database

[SQL] MySQL REGEXP(정규 표현식)

혼다 2024. 8. 12. 20:21

REGEXP(=Regular Exrpession) 정규 표현식

REGEXP는 정규 표현식을 사용하여 문자열 패턴과 일치시키는 데 사용되는 함수입니다.  REGEXP를 사용하면 기본 연산자보다 복잡한 문자열 조건을 걸어서 데이터를 검색할 수 있습니다.

 

정규 표현식은 Pattern을 사용해서 문자열을 처리합니다. 찾을 대상문자열에서 정규 표현식을 사용하여 해당 Pattern에 맞는 문자열을 검색합니다. 사용되는 Pattern의 종류는 아래와 같습니다.

 

기본 사용법

SELECT column_name
FROM table_name
WHERE column_name REGEXP '정규 표현식';

 

Pattern 종류

Matching

pattern 기능 예시 설명
. 문자 하나 "..." 문자열의 길이가 세 글자 이상인 것을 찾음
| (수직선) OR(=또는) "강아지|고양이" '강아지' 또는 '고양이'를 포함하는 문자열을 찾음
[] [] 안에 나열된 패턴에 해당하는 문자열을 찾음.
[] 괄호 안에 있는 문자 중 하나.
"[123]d" '1d' 또는 '2d' 또는 '3d'를 포함하는 문자열을 찾음
^ 문자열의 시작 "^안녕" '안녕'으로 시작하는 문자열을 찾음
$ 문자열의 끝 "안녕$" '안녕'으로 끝나는 문자열을 찾음

 

Times (반복 횟수)

pattern 기능 예시 설명
* 0회 이상 반복 "a*" 'a'가 0번 이상 등장하는 문자열을 찾음. "b", "a", "aa" 모두 해당됨
+ 1회 이상 반복 "a+" 'a'가 1번 이상 등장하는 문자열을 찾음. "a", "aa", "bab" 모두 해당됨
{m} 정확히 m번 반복 "a{3}" 'aaa'가 있는 문자열을 찾음
{m, } m회 이상 반복 "a{3,}" 'aaa', 'aaaa', 'aaaaa' 등등 a가 연속 3번 이상 반복되는 문자열이 포함된 것을 찾음
{m, n} m회 이상 n회 이하 반복 "a{1,2}" 'a' 또는 'aa'을 포함하는 문자열을 찾음
? 0~1회 반복 "[ab]?" 'a' 또는 'b'가 0~1회 등장하는 문자열을 찾음. 'a', 'b', 'ab', 'ac', 'bc' 모두 해당됨

 

GROUP

pattern 기능 예시 설명
[A-z] 또는 [:alpha:] 또는 \a 알파벳 대문자 또는 소문자인 문자열을 찾음 "[A-z]+" 알파벳이 한 개 이상인 문자열을 찾음
[0-9] 또는 [:digit:] 또는 \d 숫자인 문자열을 찾음 "^[0-9]+" 한 개 이상의 숫자로 시작하는 문자열을 찾음

 

NOT

pattern 기능 예시 설명
[^문자] 괄호 안의 문자를 포함하지 않는 문자열을 찾음 [^가나다] '가' 또는 '나' 또는 '다'를 포함하지 않는 문자열을 찾음. '가지', '나무', '다람쥐' 모두 제외됨

 

참고 사이트:
- https://velog.io/@gillog/MySQL-REGEXPRegular-Expression%EC%A0%95%EA%B7%9C-%ED%91%9C%ED%98%84%EC%8B%9D
- https://velog.io/@dxstyblxe/SQL-MySQL-REGEXP