[SQL][Oracle] 정규 표현식 ( REGEXP : Regular Expression )

728x90

 

https://docs.oracle.com/en/database/oracle/oracle-database/19/adfns/regexp.html#GUID-1935FD80-A3CD-413F-BD2E-BBEFE64000B2 

 

Database Development Guide

 

docs.oracle.com

 

< 정규 표현식 >

  -  문자열의 규칙을 표현하는 검색 패턴
  -  주로 문자열 검색치환에 사용

 

[ POSIX 연산자 ]

 

*  기본 연산자

    . (dot)  :  모든 문자와 일치 (newline 제외)
    | (or)  :  대체 문자를 구분
    / (backslash)  :  다음 문자를 일반 문자로 처리 (ex. 특수문자)

 

*  앵커 (anchor)

  -  검색 패턴의 시작 지정

    ^ (carrot)  :  문자열(단일 행 방식)/행(다중 행 방식)의 시작
    $ (dollar)  :  문자열(단일 행 방식)/행(다중 행 방식)의 끝

  ※  다중 행 방식  ☞  REGEXP 함수에 'm' flag
  ※  CHR(10)  :  개행(line feed) 문자 반환

 

*  수량사 (quantifier)

  -  선행 표현식의 일치 횟수 지정
  -  패턴을 최대로 일치시키는 탐욕적(greedy) 방식으로 동작

    ?  :  0회 또는 1회 일치
    *  :  0회 이상 일치
    +  :  1회 이상 일치
    {m}  :  m회 일치
    {m,}  :  m회 이상 일치 (최소 m회)
    {,m}  :  m회 이하 일치 (최대 m회)
    {m,n}  :  m회 이상 n회 이하 일치 (최소 m회, 최대 n회)

 

*  서브 표현식 (subexpression)

  -  표현식을 소괄호로 묶은 표현식
  -  하나의 단위로 처리

    (expr)  :  괄호 안의 표현식을 하나의 단위로 취급

 

*  역 참조 (back reference)

  -  일치한 서브 표현식을 다시 참조
  -  반복되는 패턴 검색이나 서브 표현식의 위치 변경 용도로 사용

    \n  :  n번째 서브 표현식과 일치, n은 1에서 9 사이의 정수
  (ex. (ab|cd)x\1 => abxab, cdxcd )

 

*  문자 리스트 (character list)

  -  문자를 대괄호로 묶은 표현식
  -  문자 리스트 중 한 문자만 일치하면 패턴이 일치한 것으로 처리
  -  문자 리스트에서 하이픈(-)은 범위 연산자로 동작

    [char...]  :  문자 리스트 중 한 문자와 일치
    [^char...]  :  문자 리스트에 포함되지 않은 한 문자와 일치

 

*  POSIX 문자 클래스

  -  문자 리스트에서 사용

    [[:digit:]]  :  숫자 ( = [0-9] )
    [[:lower:]]  :  소문자 ( = [a-z] )
    [[:upper:]]  :  대문자 ( = [A-Z] )
    [[:alpha:]]  :  영문자 ( = [a-zA-Z] )
    [[:alnum:]]  :  영문자, 숫자 ( = [a-zA-Z0-9] )
    [[:xdigit:]]  :  16진수 ( = [a-fA-F0-9] )
    [[:punct:]]  :  구두점 기호 ( = [^[:alnum:][:cntrl:]] )
    [[:blank:]]  :  공백문자
    [[:space:]]  :  공간문자 (space, enter, tab)
    [[:cntrl:]]  :  제어 문자 (아스키 < 32, 아스키 > 126)
    [[:print:]]  :  출력이 가능한 모든 문자 (아스키 32 ~ 126)
    [[:graph:]]  :  [:print:] 에서 space 제외

  ※  CHR(9)  :  탭(tab) 문자 반환

 

[ PERL 정규 표현식 연산자 ]

 

*  

  -  POSIX 문자 클래스와 유사하게 동작

    \d  :  숫자 ( = [[:digit:]] )
    \D  :  숫자가 아닌 모든 문자 ( = [^[:digit:]] )
    \w  :  숫자, 영문자, underbar ( = [[:alnum:]_] )
    \W  :  숫자, 영문자, underbar 가 아닌 모든 문자 ( = [^[:alnum:]_] )
    \s  :  공백 문자 ( = [[:space:]] )
    \S  :  공백 문자가 아닌 모든 문자 ( = [^[:space:]] )

*  

  -  앵커와 유사하게 동작
  -  다중 행 모드를 좀 더 세밀하게 처리 가능

    \A  :  다중 행 모드와 관계없이 문자열의 시작과 일치
    \Z  :  다중 행 모드와 관계없이 문자열의 끝과 일치 (개행 문자면 앞 문자)
    \z  :  다중 행 모드와 관계없이 문자열의 끝과 일치 (개행 문자면 널)

*  

  -  수량사와 유사하게 동작
  -  패턴을 최소로 일치시키는 비탐욕적(nongreedy) 방식으로 동작

    ??  :  0회 또는 1회 일치
    *?  :  0회 이상 일치
    +?  :  1회 이상 일치
    {m}?  :  m회 일치
    {m,}?  :  m회 이상 일치 (최소 m회)
    {,m}?  :  m회 이하 일치 (최대 m회)
    {m,n}?  :  m회 이상 n회 이하 일치 (최소 m회, 최대 n회)

 

< REGEXP 함수 목록 >

 

  • REGEXP_LIKE  :  source_char 가 pattern 과 일치하면 TRUE, 일치하지 않으면 FALSE 반환
  • REGEXP_REPLACE  :  source_char 에서 일치한 pattern 을 replace_string 으로 변경한 문자 값 반환
  • REGEXP_SUBSTR  :  source_char 에서 일치한 pattern 을 반환
  • REGEXP_INSTR  :  source_char 에서 일치한 pattern 의 시작 위치를 정수로 반환
  • REGEXP_COUNT  :  source_char 에서 일치한 pattern 의 횟수를 반환

 

REGEXP_LIKE ( source_char, pattern [ , match_param ] )
REGEXP_REPLACE ( source_char, pattern [ , replace_string [ , position [ , occurrence [ , match_param ] ] ] ] )
REGEXP_SUBSTR ( source_char, pattern [ , position [ , occurrence [ , match_param [ , subexpr ] ] ] ] )
REGEXP_INSTR ( source_char, pattern [ , position [ , occurrence [ , return_opt [ , match_param [ , subexpr ] ] ] ] ] )
REGEXP_COUNT ( source_char, pattern [ , position [ , match_param ] ] )

 

매개변수 설명
source_char 검색 문자열
pattern 검색 패턴
replace_string 변경 패턴
position 검색 시작 위치  ( 기본값은 1 )
occurrence 패턴 일치 횟수  ( 기본값은 1 )
return_opt 반환 옵션  ( 0은 시작 위치, 1은 다음 위치, 기본값은 0 )
match_param 일치 옵션
subexpr 서브 표현식  ( 0은 전체 패턴, 1 이상은 서브 표현식, 기본값은 0 )

 

일치 옵션 설명
i 대소문자 무시
c 대소문자 구분
n dot(.)을 개행문자와 일치
m 다중 행 모드 ( 앵커(^, $)에 영향 )
x 검색 패턴의 공백 문자를 무시

 

더보기

핸드폰 번호
^01[01679]\-?\d{3,4}\-?\d{3,4}$


(0[1-9]|1[0-2])


(0[1-9]|[12][0-9]|3[01])

 

 

반응형