DBMS/개념

25_ 정규표현식(Regular Expression)

seungwon-1 2025. 10. 28. 10:57

1. 주요 사용 목적

  1. 문자열의 검색과 치환
  2. 특정 패턴의 문자열 추출
  3. 입력 데이터의 유효성 검사

예를 들어, 이메일 주소 형식이 올바른지 검사하거나, 전화번호에서 숫자만 추출할 때 사용한다.

 

 

2. Oracle에서의 정규식 관련 함수

(1) REGEXP_LIKE

  • 패턴과 일치하는 데이터를 검색한다.
SELECT * 
FROM employees
WHERE REGEXP_LIKE(first_name, '^A.*');  -- A로 시작하는 이름 검색

 

(2) REGEXP_SUBSTR

  • 패턴에 맞는 부분 문자열을 추출한다.
SELECT REGEXP_SUBSTR('Hello World', '[A-Za-z]+') 
FROM dual;  -- 첫 번째 단어 추출

 

(3) REGEXP_REPLACE

  • 패턴에 맞는 부분을 다른 문자열로 치환한다.
SELECT REGEXP_REPLACE('010-1234-5678', 
       '([[:digit:]]{3})-([[:digit:]]{4})-([[:digit:]]{4})', 
       '(\1)\2-\3') 
FROM dual;

 

 

(4) REGEXP_INSTR

  • 패턴과 일치하는 위치(index) 를 반환한다.
SELECT REGEXP_INSTR('Hello World', 'World') 
FROM dual;

 

3. 자주 사용되는 정규식 패턴

(1) 메타문자

기호의미
^ 문자열의 시작
$ 문자열의 끝
. 임의의 한 문자
* 앞 문자가 0회 이상 반복
+ 앞 문자가 1회 이상 반복
? 앞 문자가 0회 또는 1회 발생

 

(2) 문자 클래스

표현식의미
[abc] a, b, c 중 하나
[^abc] a, b, c를 제외한 문자
[0-9] 숫자 0부터 9
[a-z] 소문자 알파벳
[A-Z] 대문자 알파벳

 

(3) POSIX 문자 클래스

표현식의미
[:digit:] 숫자 [0-9]
[:alpha:] 알파벳 [a-zA-Z]
[:alnum:] 알파벳 또는 숫자 [a-zA-Z0-9]
[:space:] 공백 문자

 

4. 실습 예제

(1) 이메일 유효성 검사

SELECT email 
FROM employees
WHERE REGEXP_LIKE(email, '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$');

이 패턴은 아이디@도메인.확장자 형식을 검사한다.

 

(2) 전화번호 형식 변환

SELECT REGEXP_REPLACE('010-1234-5678', 
       '(^[0-9]{3})-([0-9]{4})-([0-9]{4}$)', 
       '(\1) \2-\3') AS formatted_phone
FROM dual;

 

  • ^[0-9]{3} : 시작부터 3자리 숫자
  • [0-9]{4} : 중간 4자리
  • [0-9]{4}$ : 마지막 4자리로 끝
  • \1, \2, \3 : 각 그룹을 참조

 

(3) 문자열에서 숫자만 추출

 
SELECT REGEXP_REPLACE('ABC123DEF456', '[^0-9]', '') AS numbers_only
FROM dual;

 

[^0-9]는 숫자가 아닌 모든 문자를 의미하며, 이를 빈 문자열로 바꿔 숫자만 남긴다.

 

5. 주의사항

  1. 정규식은 대소문자를 구분한다.
  2. 복잡한 패턴은 쿼리 성능에 영향을 줄 수 있다.
  3. Oracle 버전에 따라 지원하는 정규식 기능이 다를 수 있다.

'DBMS > 개념' 카테고리의 다른 글

27_ DCL (Data Control Language)  (0) 2025.11.01
26_ 트리거(TRIGGER) 정리  (0) 2025.10.30
24_ DBMS 심화 주제  (0) 2025.10.26
23_ CASE문  (0) 2025.10.24
22_ CTE (Common Table Expressions)  (0) 2025.10.22