< 정규 표현식 >
- 문자열의 규칙을 표현하는 검색 패턴
- 주로 문자열 검색과 치환에 사용
[ 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])
'프로그래밍 언어 ( Programming Language ) > SQL' 카테고리의 다른 글
[SQL][Oracle] WITH RECURSIVE (0) | 2023.04.07 |
---|---|
[SQL][Oracle] 계정 생성, 권한 부여 (0) | 2022.07.19 |
[SQL][Oracle] 데이터 타입 ( Data Type ) (0) | 2022.01.12 |
[SQL][MySQL] DML - WITH (0) | 2022.01.10 |
[SQL][DBMS] Oracle DB 와 MySQL 의 차이 - 문자열 부호, 대소문자 구분 등 (0) | 2022.01.07 |