REGEXP,REGEXP_LIKE,REGEXP_INSTR,REGEXP_SUBSTR,REGEXP_REPLACE()
반응형
참고 블로그 : https://goodteacher.tistory.com/232
* 모든 쿼리는 match_type 사용 가능하다.
Pattern | 기능 |
'c' | Case-sensitive matching(대소문자 구분) |
'i' | Case-insensitive matching.(대소문자구분X,default) |
'm' | multi line모드,default :문자열의 시작과 끝 줄만 일치여부 체크 |
match_type = 'c' , 'i' ex)
더보기
SELECT DISTINCT city
FROM station
WHERE REGEXP_LIKE(city,'^[aeiou]','c');
SELECT DISTINCT city
FROM station
WHERE REGEXP_LIKE(city,'^[aeiou]','i');
REGEXP,RLIKE,REGEXP_LIKE
공식문서 왈 , REGEXP,RLIKE은 REGEXP_LIKE의 동음이의어( REGEXP and RLIKE are synonyms for REGEXP_LIKE() )
Pattern | 기능 | 예시 | 설명 |
. | 문자 하나 | "..." | 문자열의 길이가 세 글자 이상인 것을 찾음. |
I(수직선) | 또는 (OR). I(수직선)로 구분된 문자에 해당하는 문자열을 찾음. | "데이터 I (수직선)데이타" | ‘데이터’ 또는 ‘데이타’에 해당하는 문자열을 찾음. |
[] | [] 안에 나열된 패턴에 해당하는 문자열을 찾음. | "[123]d" | 대상 문자열에서 ‘1d’ 또는 ‘2d’ 또는 ‘3d’인 문자열을 찾음. |
^ | 시작하는 문자열을 찾음. | "^안녕" | 대상 문자열에서 ‘안녕’으로 시작하는 문자열을 찾음. |
$ | 끝나는 문자열을 찾음. | "잘가$" | 대상 문자열에서 ‘잘가’로 끝나는 문자열을 찾음. |
Pattern | 기능 | 예시 | 설명 |
* | 0회 이상 나타나는 문자 | "a*" | ‘a’가 0번 이상 등장하는 문자열을 찾음. ‘b’, ‘a’, ‘aa’ 모두 해당. |
+ | 1회 이상 나타나는 문자 | "국+" | ‘국’이 1번 이상 등장하는 문자열을 찾음. ‘한국’, ‘미역국’, ‘국거리’ 모두 해당. |
{m,n} | m회 이상 n회 이하 반복되는 문자 | "치{1,2}" | ‘치’가 1회 이상 2회 이하 반복하는 문자열을 찾음. ‘치커리’, ‘치카치카’ 모두 해당. |
? | 0~1회 나타나는 문자 | "[가나다]?" | ‘가’ 또는 ‘나’ 또는 ‘다’가 0~1회 등장하는 문자열을 찾음. ‘가지마’, ‘나라’, ‘안녕’ 모두 해당. |
Pattern | 기능 | 예시 | 설명 |
[A-z] 또는 [:alpha:] 또는 \a | 알파벳 대문자 또는 소문자인 문자열을 찾음 | "[A-z]+" | 대상 문자열에서 알파벳이 한 개 이상인 문자열을 찾음 |
[0-9] 또는 [:digit:] 또는 \d | 숫자인 문자열을 찾음 | "^[0-9]+" | 한 개 이상의 숫자로 시작하는 문자열을 찾음 |
Pattern | 기능 | 예시 | 설명 |
[^문자] | 괄호 안의 문자를 포함하지 않은 문자열을 찾음 | "[^길로그]" | ‘길’ 또는 ‘로’ 또는 ‘그’를 포함하지 않는 문자열을 찾음. ‘길가’, ‘로그’, ‘그리고’ 모두 제외됨. |
REGEXP_INSTR()
문자열에서 정규 표현식이 등장하는 인덱스(위치) 값을 반환, 일치하지 않을 경우 0 반환, 문자 인덱스는 1부터 시작
REGEXP_INSTR(source_char, expr[, pos[, occurrence[, return_option[, match_type]]]])
- source_char: 점검 대상 문자열
- expr: 정규 표현식
- pos: 검색을 시작할 위치로 기본은 1
- occurrence: 몇 번째로 등장한 요소인가에 대한 옵션으로 기본은 1
- return_option: 0이면 matching이 시작한 곳, 1이면 matching이 끝난 다음 위치. 기본은 0
-- dog 글자가 나오는 시작 인덱스 반환,문자 인덱스는 1부터 시작하므로 1로 반환
mysql> SELECT REGEXP_INSTR('dog cat dog', 'dog');
+------------------------------------+
| REGEXP_INSTR('dog cat dog', 'dog') |
+------------------------------------+
| 1 |
+------------------------------------+
-- 2번째 문자(o) 이후부터 dog가 나오는 시작 인덱스 반환
-- dog cat dog
-- 123456789 -> 9인덱스 반환
mysql> SELECT REGEXP_INSTR('dog cat dog', 'dog', 2);
+---------------------------------------+
| REGEXP_INSTR('dog cat dog', 'dog', 2) |
+---------------------------------------+
| 9 |
+---------------------------------------+
-- a{2}:a가 2번 반복된 aa 문자의 첫번재 인덱스 반환
mysql> SELECT REGEXP_INSTR('aa aaa aaaa', 'a{2}');
+-------------------------------------+
| REGEXP_INSTR('aa aaa aaaa', 'a{2}') |
+-------------------------------------+
| 1 |
+-------------------------------------+
-- a{4}:a가 4번 연속 반복된 aaaa문자의 첫번재 인덱스 반환
-- aa aaa aaaa
-- 12345678 -> 8반환
mysql> SELECT REGEXP_INSTR('aa aaa aaaa', 'a{4}');
+-------------------------------------+
| REGEXP_INSTR('aa aaa aaaa', 'a{4}') |
+-------------------------------------+
| 8 |
+-------------------------------------+
REGEXP_SUBSTR()
정규식과 일치하는 문자열 반환. 일치하지 않을 경우 NULL
REGEXP_SUBSTR(source_char, expr[, pos[, occurrence[, match_type]]])
- source_char: 점검 대상 문자열
- expr: 정규 표현식
- pos: 검색을 시작할 위치로 기본은 1
- occurrence: 몇 번째로 등장한 요소인가에 대한 옵션으로 기본은 1
mysql> SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+');
+----------------------------------------+
| REGEXP_SUBSTR('abc def ghi', '[a-z]+') |
+----------------------------------------+
| abc |
+----------------------------------------+
-- 1번째 문자(a)부터 3번째 패턴
mysql> SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+', 1, 3);
+----------------------------------------------+
| REGEXP_SUBSTR('abc def ghi', '[a-z]+', 1, 3) |
+----------------------------------------------+
| ghi |
+----------------------------------------------+
REGEXP_REPLACE()
정규표현식에 해당하는 문자를 대체한다
REGEXP_REPLACE(source_char, expr, replace_string[, pos[, occurrence[, mtch_type]]])
- source_char: 점검 대상 문자열
- expr: 정규 표현식
- replace_string: 대체 문자
- pos: 검색을 시작할 위치로 기본은 1
- occurrence: 몇 번째로 등장한 요소인가에 대한 옵션으로 기본은 1
-- b 문자열 X로 변경
mysql> SELECT REGEXP_REPLACE('a b c', 'b', 'X');
+-----------------------------------+
| REGEXP_REPLACE('a b c', 'b', 'X') |
+-----------------------------------+
| a X c |
+-----------------------------------+
mysql> SELECT REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X', 1, 3);
+----------------------------------------------------+
| REGEXP_REPLACE('abc def ghi', '[a-z]+', 'X', 1, 3) |
+----------------------------------------------------+
| abc def X |
+----------------------------------------------------+
반응형