카테고리 없음

[MySQL] 정규 표현식 (REGEXP) 사용법, 관련 함수

루루23 2024. 12. 29. 19:04
반응형

1. REGEXP 

문자열이 특정 정규 표현식 패턴과 일치하는지 확인하는 연산자

column_name REGEXP 'pattern'
  • column_name: 검색할 열
  • pattern: 정규 표현식 패턴
-- 문자열에 'apple'이 포함된 경우 찾기
SELECT * FROM table_name WHERE column_name REGEXP 'apple';

-- 숫자로만 구성된 문자열 찾기
SELECT * FROM table_name WHERE column_name REGEXP '^[0-9]+$';

-- 특정 접두사로 시작하는 문자열
SELECT * FROM table_name WHERE column_name REGEXP '^prefix';

-- 특정 접미사로 끝나는 문자열
SELECT * FROM table_name WHERE column_name REGEXP 'suffix$';

-- 대소문자 구분 없이 문자열 찾기
SELECT * FROM table_name WHERE column_name REGEXP '(?i)pattern';

 

2. NOT REGEXP

문자열이 정규 표현식 패턴과 일치하지 않는 경우 확인

-- 'apple'이 포함되지 않은 경우
SELECT * FROM table_name WHERE column_name NOT REGEXP 'apple';

 

3. 정규 표현식의 주요 패턴

. 임의의 한 문자 a.c  abc, adc
* 0개 이상의 반복 a*  a, aa, aaa
+ 1개 이상의 반복 a+  a, aa, aaa
? 0개 또는 1개 a? → ``, a
^ 문자열의 시작 ^a  apple
$ 문자열의 끝 e$  apple
[abc] a, b, c 중 하나 [aeiou] → 모음
[a-z] a부터 z 사이의 문자 [a-d]  a, b, c, d
[^abc] a, b, c를 제외한 문자 [^aeiou] → 자음

 

 

4. MySQL 정규 표현식 관련 함수

1) REGEPX_LIKEREGEXP 연산자와 동일한 역할

SELECT * FROM table_name WHERE REGEXP_LIKE(column_name, 'pattern');

 

예) 특정 형식의 이메일 주소 찾기

SELECT * FROM users WHERE REGEXP_LIKE(email, '^[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글자 이상으로 끝나야 함

 

2) REGEXP_REPLACE : 정규식을 사용해 문자열의 특정 부분을 다른 문자열로 대체

REGEXP_REPLACE(string, 'pattern', 'replacement')

 

예) 문자열에서 공백을 대시(-)로 대체

SELECT REGEXP_REPLACE('hello world', '\\s', '-') AS result;
-- 결과: 'hello-world'

 

 

3) REGEXP_INSTR : 정규식 패턴이 처음으로 나타나는 위치 반환

REGEXP_INSTR(string, 'pattern')

 

 

예) 'world' 단어가 시작하는 위치 찾기

SELECT REGEXP_INSTR('hello world', 'world') AS position;
-- 결과: 7

 

 

4) REGEXP_SUBSTR : 정규식에 일치하는 첫 번째 부분 문자열을 반환

REGEXP_SUBSTR(string, 'pattern')

 

예) 문자열에서 첫 번째 단어 추출

SELECT REGEXP_SUBSTR('hello world', '\\w+') AS first_word;
-- 결과: 'hello'

 

반응형