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