우와한 개발자

[SQL] 정규표현식 메타문자와 함수 - REGEXP_LIKE, REGEXP_SUBSTR, REGEXP_REPLAC

by 우와한개발자

1. 정규표현식 메타문자

1) 횟수 지정 메타 문자

메타문자 기능 설명
? 0 또는 1회 바로 앞 문자가 있어도 되고 없어도 됨
* 0회 이상 앞 문자가 0번 이상 반복
+ 1회 이상 앞 문자가 최소 1번 이상 반복
{n} n회 정확히 n번 반복
{m,} m회 이상 m번 이상 반복
{m,n} m~n회 m번 이상 n번 이하 반복
-- ? : u가 있어도 되고 없어도 됨
SELECT REGEXP_SUBSTR('color', 'colou?r') FROM dual;     -- color
SELECT REGEXP_SUBSTR('colour', 'colou?r') FROM dual;    -- colour

-- * : b가 0번 이상 반복
SELECT REGEXP_SUBSTR('ac', 'ab*c') FROM dual;           -- ac
SELECT REGEXP_SUBSTR('abc', 'ab*c') FROM dual;          -- abc
SELECT REGEXP_SUBSTR('abbc', 'ab*c') FROM dual;         -- abbc

-- + : b가 1번 이상 반복
SELECT REGEXP_SUBSTR('abc', 'ab+c') FROM dual;          -- abc
SELECT REGEXP_SUBSTR('abbc', 'ab+c') FROM dual;         -- abbc

-- {n} : 정확히 n번 반복
SELECT REGEXP_SUBSTR('aaa', 'a{3}') FROM dual;          -- aaa

-- {m,} : m번 이상 반복
SELECT REGEXP_SUBSTR('aa', 'a{2,}') FROM dual;          -- aa
SELECT REGEXP_SUBSTR('aaaa', 'a{2,}') FROM dual;        -- aaaa

-- {m,n} : m번 이상 n번 이하 반복
SELECT REGEXP_SUBSTR('ab', 'a{1,3}b') FROM dual;        -- ab
SELECT REGEXP_SUBSTR('aab', 'a{1,3}b') FROM dual;       -- aab
SELECT REGEXP_SUBSTR('aaab', 'a{1,3}b') FROM dual;      -- aaab

 

2) 기본 메타 문자

메타문자 기능 설명
. 임의 문자 아무 문자 1개 (줄바꿈 제외)
[ ] 문자 집합 대괄호 안 문자 중 하나
[^ ] 부정 해당 문자 제외
^ 시작 문자열 시작
$ 문자열 끝
( ) 그룹 패턴 묶기
` ` OR

 

3) 탈출문자

메타문자 기능 설명
\\d 숫자 [0-9]
\\D 숫자 제외 숫자 아닌 문자
\\w 영숫자 [a-zA-Z0-9_]
\\W 영숫자 제외 특수문자
\\s 공백 space, tab
\\S 공백 제외 공백 아닌 문자
\\. . 문자 점 자체
\\* \\+ \\?\\. 문자 메타문자를 문자로 사용

 

4) 옵션

옵션 설명
'i' 대소문자 구분 안함
'c' 대소문자 구분함
'n' 온점(.)이 개행문자와 같은 취급하도록함
'm' 여러 줄 모드 (^와 $ 사용해 시작과 끝에 대응)
REGEXP_LIKE('abc', 'A', 'i')  -- TRUE (대소문자 무시)

 

2. 정규표현식 함수

함수 설명
REGEXP_LIKE(문자열, 패턴[, 옵션]) 패턴 만족하는 문자열 포함 여부
REGEXP_SUBSTR(문자열, 패턴[, 시작위치[, 몇번째[, 옵션]]]) 패턴 만족하는 부분 문자열 추출
REGEXP_INSTR(문자열, 패턴[, 시작위치[, 몇번째[, 옵션]]]) 패턴 만족하는 문자열의 위치 반환
REGEXP_REPLACE(문자열, 패턴, 바꿀문자열[, 옵션]) 패턴 만족하는 문자열을 다른 문자열로 치환
REGEXP_COUNT(문자열, 패턴[, 시작위치[, 옵션]]) 패턴 개수 반환

 

1) REGEXP_LIKE : 패턴 만족하는 문자열 포함 여부

  • REGEXP_LIKE(문자열, 패턴[, 옵션])
REGEXP_LIKE('abc123', '\\d')         -- 숫자 포함 여부 (TRUE)
REGEXP_LIKE('HELLO', '^[A-Z]+$')    -- 모두 대문자인지 확인
REGEXP_LIKE('abc', '^a')            -- a로 시작하는지

 

2) REGEXP_SUBSTR : 패턴 만족하는 부분 문자열 추출

  • REGEXP_SUBSTR(문자열, 패턴[, 시작위치[, 몇번째[, 옵션]]])
REGEXP_SUBSTR('abc123def', '\\d+')     -- 123
REGEXP_SUBSTR('abc123def456', '\\d+')     -- 123 (앞에서부터 패턴에 맞는 것 먼저 반환)
REGEXP_SUBSTR('a4b6c8', '\\d', 1, 2)   --  6 (1번째 문자부터 검색, 2번째 숫자)
REGEXP_SUBSTR('hello@naver.com', '[^@]+') -- hello

 

3) REGEXP_INSTR : 패턴 만족하는 문자열의 위치 반환

  • REGEXP_INSTR(문자열, 패턴[, 시작위치[, 몇번째[, 옵션]]])
REGEXP_INSTR('abc123', '\\d')         -- 4 (첫 숫자 위치)
REGEXP_INSTR('a1b2c3', '\\d', 1, 2)   -- 4 (1번째부터 검색, 2번째 숫자 위치)
REGEXP_INSTR('hello world', 'o')     -- 5

 

4) REGEXP_REPLACE : 패턴 만족하는 문자열을 다른 문자열로 치환

  • REGEXP_REPLACE(문자열, 패턴, 바꿀문자열[, 옵션])
REGEXP_REPLACE('abc123', '\\d', '')     -- abc (숫자 제거)
REGEXP_REPLACE('010-1234-5678', '[^0-9]', '') -- 01012345678
REGEXP_REPLACE('hello   world', '\\s+', '-')   -- hello-world

 

5)REGEXP_COUNT : 패턴 만족하는 문자열 갯수 반환

  • REGEXP_COUNT(문자열, 패턴[, 시작위치[, 옵션]])
REGEXP_COUNT('a1b2c3', '\\d')   -- 3 (숫자 개수)
REGEXP_COUNT('hello', 'l')     -- 2
REGEXP_COUNT('aaa', 'a')       -- 3

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기