1. 정규표현식이란


문자열 데이터의 간단한 패턴 및 복잡한 패턴을 검색 할 수 있는 방법으로 기존의 LIKE 연산의 한계를 뛰어넘는 막강한 검색 도구이다. 다양한 Meta Character 를 이용하여 복잡한 프로그래밍을 간단하게 해결 할 수 있으며 Data Validation, ETL(Extract, Transform, Load), Data Cleansing, Data Mining 등의 작업에서 유용하게 사용 될 수 있다. 제약 조건으로 테이블의 Data 유효성을 검증 할때도 사용 가능하다.



2. 정규표현식 방법


 REGEXP_LIKE

 Like 연산과  유사하며 정규식 패턴을 검색

 REGEXP_REPLACE

 정규식 패턴을 검색하여 대체 문자열로 변경

 REGEXP_INSTR

 정규식 패턴을 검색하여 위치 반환

 REGEXP_SUBSTR

 정규식 패턴을 검색하여 부분 문자 추출 

 REGEXP_COUNT

 정규식 패턴을 검색하여 발견된 횟수 반환 



3. Meta Character


.

 지원되는 Character set에서 NULL 을 제외한 임의의 문자와 일치

 +

 한 번 이상 발생 수 일치 

 ?

 0 또는 1번 발생 수 일치 

 *

 선행 하위식의 0번 이상 발생 수 일치 

 {m}

 선행 표현식의 정확히 m번 이상 발생 수 일치 

 {m , }

 선행 하위식과 최소 m번 이상 발생 수 일치 

 {m, n}

 선행 하위식의 최소 m번 이상, 최대 n번 이하 발생 수 일치 

 [ ... ]

 괄호 안의 리스트에 있는 임의의 단일 문자와 일치 

 |

 여러 대안 중 하나와 일치 (OR) 

 ( . . . )

 괄호로 묶인 표현식을 한 단위로 취급함. 하위식은 리터럴의 문자열이나 연산자를 포함한 복잡한 표현식 가능 

 ^

 문자열 시작 부분과 일치 

 $

 문자열 끝 부분과 일치 

 \

 표현식에서 후속 메타 문자를 리터럴로 처리 (ESCAPE) 

 \n

 괄호 안의 그룹화된 n번쨰(1~9) 선행 하위식과 일치. 괄호는 표현식이 기억되도록 만들고 backreference에서 표현식 참조 

 /d

 숫자 문자 

 [ :class: ]

 지정된 POSIX 문자 클래스에 속한 임의의 문자와 일치

 [:alpha:] 알파벳 문자 [:digit:] 숫자 [:lower:] 소문자 알파벳 문자 [:upper:] 대문자 알파벳 문자 [:alnum:] 알파벳/숫자

 [:space:] 공백 문자 [:punct:] 구두점 기호 [:cntrl:] 컨트롤 문자 [:print:] 출력 가능한 문자 

 [^:class:]

 괄호 안의 리스트에 없는 임의의 단일 문자와 일치 


Meta Character를 이용하여 정규식 사용이 가능하다.



4. 정규표현식 활용 예제



REGEXP_REPLACE

http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions130.htm



1
2
3
4
5
SELECT
  REGEXP_REPLACE(phone_number,
                 '([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})',
                 '(\1) \2-\3'"REGEXP_REPLACE"
  FROM employees;
cs



1
2
3
4
5
6
7
REGEXP_REPLACE
--------------------------------------------------------------------------------
(515123-4567
(515123-4568
(515123-4569
(590423-4567
. . .
cs




REGEXP_INSTR

http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions129.htm#SQLRF06300



1
2
3
4
5
SELECT
SELECT
  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',
               '[^ ]+'16"REGEXP_INSTR"
  FROM DUAL;
cs


1
2
3
REGEXP_INSTR
------------
          37
cs



1
2
3
4
SELECT
  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',
               '[s|r|p][[:alpha:]]{6}'321'i'"REGEXP_INSTR"
  FROM DUAL;
cs


1
2
3
REGEXP_INSTR
------------
          28
cs




REGEXP_SUBSTR

http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions131.htm



1
2
3
4
SELECT
  REGEXP_SUBSTR('500 Oracle Parkway, Redwood Shores, CA',
                ',[^,]+,'"REGEXPR_SUBSTR"
  FROM DUAL;
cs


1
2
3
REGEXPR_SUBSTR
-----------------
, Redwood Shores,
cs



1
2
3
4
SELECT
  REGEXP_SUBSTR('http://www.oracle.com/products',
                'http://([[:alnum:]]+\.?){3,4}/?'"REGEXP_SUBSTR"
  FROM DUAL;
cs


1
2
3
REGEXP_SUBSTR
----------------------
http://www.oracle.com/
cs





+ Recent posts