정규표현식(Regular Expression, RegEx)이란 문자열에서 특정한 패턴을 찾거나, 검사하거나, 바꾸기 위해 사용하는 표현식(패턴 언어)이다

정규표현식 함수
REGEXP_REPLACE(대상, 찾을문자열, 바꿀문자열, 검색인덱스, 발견횟수, 옵션)
REGEXP_SUBSTR(대상, 패턴, 검색인덱스, 발견횟수, 옵션, 추출그룹)
REGEXP_INSTR(원본, 찾을패턴, 시작인덱스, 발견횟수, 출력옵션, 옵션, 추출그룹)
REGEXP_LIKE(원본, 찾을문자열, 옵션)
REGEXP_COUNT(원본, 찾을문자열, 시작인덱스, 옵션)
1) 문자열이 특정 패턴과 일치하는지 확인 (WHERE절에서 사용)
SELECT EMP_NAME
FROM EMPLOYEE
WHERE REGEXP_LIKE(EMP_NAME, '^김'); -- 이름이 '김'으로 시작하는 사람 찾기
2) 문자열 중에서 정규식 패턴에 맞는 부분만 추출
SELECT EMAIL,
REGEXP_SUBSTR(EMAIL, '@[A-Za-z0-9.-]+') AS DOMAIN -- 이메일 주소에서 도메인만 추출
FROM USERS;
| DOMAIN | |
|---|---|
| test@gmail.com | @gmail.com |
| hello@naver.com | @naver.com |
| vivi@nexon.com | @nexon.com |
3) 정규식 패턴이 문자열에서 시작하는 위치 반환
SELECT PHONE,
REGEXP_INSTR(PHONE, '-') AS FIRST_HYPHEN_POSITION -- 전화번호에서 하이픈(-)이 처음 나타나는 위치 찾기
FROM CONTACTS;
| PHONE | FIRST_HYPHEN_POSITION |
|---|---|
| 010-1234-5678 | 4 |
4) 문자열에서 정규식 패턴에 맞는 부분을 다른 문자열로 치환
SELECT EMP_NAME,
REGEXP_REPLACE(EMP_NAME, '[0-9]', '') AS CLEAN_NAME -- 이름에서 숫자 제거하기
FROM EMPLOYEE;
| EMP_NAME | CLAEN_NAME |
|---|---|
| 홍길동4813048031 | 홍길동 |
| 김민숭3 | 김민숭 |
5) 특정 문자의 등장 횟수 세기
SELECT EMP_NAME,
REGEXP_COUNT(EMP_NAME, '윤') AS YUN_COUNT -- 이름에 '윤'이 몇 번 들어있는지 확인
FROM EMPLOYEE;
| EMP_NAME | YUN_COUNT |
|---|---|
| 함지슝 | 0 |
| 김지윤 | 1 |
| 윤지윤 | 2 |
| 윤윤숭 | 2 |
6) 문장 속에서 패턴을 찾아 추출
SELECT REGEXP_SUBSTR(
'인수는 100kg이고, 지숭이는 50kg이며, 하리는 75kg이다',
'([0-9]+)kg', -- 패턴: 숫자 뒤에 'kg'가 오는 형태
1, -- position: 문자열의 처음(1번째)부터 검색
2, -- occurrence: 두 번째 매칭값(=50kg)
'i', -- match_parameter: 대소문자 구분 안 함(ignore case)
1 -- subexpr: 괄호로 묶은 첫 번째 그룹([0-9]+)
) AS SECOND_WEIGHT
FROM DUAL;
| SECOND_WEIGHT |
|---|
| 50 |