상세 컨텐츠

본문 제목

정규 표현식 Regular Expression

DataBase/Oracle

by H_Develop 2022. 6. 7. 16:24

본문

정규 표현식 (Regular Expression)

REGEXP_LIKE 정규식 패턴을 검색, LIKE 연산과 유사

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

REGEXP_INSTR 정규식 패턴을 검색, 위치를 반환

REGEXP_SUBSTR 정규식 패턴을 검색, 부분 문자 추출

REGEXP_COUNT 정규식 패턴을 검색, 발견된 횟수 반환

메타문자 : 검색 알고리즘을 지정하는 연산자.

리터럴 문자 : 검색중인 일반적인 문자.

https://neocan.tistory.com/348

메타문자
. 		임의의 한 문자
? 		앞 문자가 없거나 하나 있음 ( 0 또는 1번 발생 )
+ 		앞 문자가 하나 이상 있음
* 		앞 문자가 0개 이상 있음
{m} 	선행 표현식의 m번 발생
{m,} 	선행 표현식의 최소 m번 이상 발생
{m,n}	선행 표현식이 최소 m번 이상, 최대 n번 이하 발생
[...]	괄호 안의 리스트에 있는 임의의 단일 문자와 일치

| 		OR
(...) 	괄호로 묶인 표현식을 한 단위로
^ 		문자열 시작 부분과 일치 // ~로 시작
[^] 	해당 문자에 해당하지 않는 한 문자
$ 		문자열의 끝 부분과 일치 // ~로 끝남

\ 		표현식에서 후속 문자를 리터럴(일반 문자)로 처리
\n		괄호 안에 그룹화 된 n 번째 (1-9) 선행 하위식과 일치
\d 		숫자 문자

[:class:] 	지정된 POSIX 문자 클래스에 속한 임의의 문자와 일치
[:alpha:] 	알파벳문자 [:digit:] 숫자 [:lower:] 소문자 알파벳 문자 [:upper:] 대문자 알파벳 문자
[:alnum:]	알파벳/숫자 [:space:] 공백 문자 [:punct:] 특수 문자 [:cntrl:] 컨트롤 문자 [:print:] 출력 가능한 문자
[^:class:] 	괄호안의 리스트에 없는 임의의 단일 문자와 일치

REGEXP_LIKE(검색_값, 패턴, .. 매치_옵션)

REGEXP_SUBSTR(검색_값, 패턴1, 패턴2, 위치, 특정_문자, 매치_옵션)

REGEXP_REPLACE(검색_값, 패턴, 대체_값, 위치, 발생, 매치_옵션)

제품의 이름 중, SS시작하며 P를 포함하지 않은 제품

select product_name from product_information

where REGEXP_LIKE (product_name, 'SS[^P]')

// ^ ~로 시작 $ ~로 끝남

제품의 이름 중, SS시작하며 P나 S로 이어지는 제품

select product_name from product_information

where REGEXP_LIKE (product_name, 'SS[PS]')

제품의 이름 중, SS시작하며 P부터 S까지의 제품

select product_name from product_information

where REGEXP_LIKE (product_name, 'SS[P-S]')

// [a-z] (a~z 중 하나) / [a..f] (a로 시작되고 f로 끝나는 총 4자리 문자)

// ^[^a-f] (a~f 로 시작하지 않음) / ^[PS] (P나 S로 시작)

 

■ 하나라도 숫자가 아닌것이 있으면 선택, REGEXP_LIKE(ID, ‘[^[:digit:]]’)

■ 하나라도 숫자를 포함하는 문자열, REGEXP_LIKE(ID, ‘[[:digit:]]’)

■ 알파벳이 아닌 문자를 포함하는 문자열, REGEXP_LIKE(ID, ‘[^[:alpha:]]’)

■ ‘1’뒤에 ‘q’를 포함하는 문자열, REGEXP_LIKE(ID, ‘1[q]’)

■ ‘1’뒤에 ‘2’이나 ‘q’를 포함하는 문자열, REGEXP_LIKE(ID, ‘1[2q]’) 또는 REGEXP_LIKE(ID, ‘1[q2]’)

■ ‘1qw’뒤에 ‘2’가 없는 문자열, REGEXP_LIKE(ID, ‘1qw[^2]’)

■ ‘1’뒤에 ‘2’가 있는 문자열, ‘1’과 ‘2’사이에 문자가 있거나 없거나 상관없음,

REGEXP_LIKE(ID, ‘[1]?[2]’) 또는 REGEXP_LIKE(ID, ‘[1]*[2]’)

■ 문자로만 조합된 문자열, REGEXP_LIKE(ID, ‘^[^0-9]*$’) 또는 NOT REGEXP_LIKE(ID, ‘[0-9]’)

■ 숫자로만 조합된 문자열 , REGEXP_LIKE(ID, ‘^[0-9]*$’) 또는 NOT REGEXP_LIKE(ID, ‘[^0-9]’)

■ 영문 대문자, 소문자, 숫자로만 조합된 문자열, REGEXP_LIKE(ID, ‘^[A-Za-z0-9]*$’)

■ 알파벳만 존재하는 문자열, REGEXP_LIKE(ID, ‘^[[:alpha:]]*$’)

■ 특수문자를 포함하는 문자열, REGEXP_LIKE(ID, ‘[[:punct:]]’)

■ 특수문자만 존재하는 문자열, REGEXP_LIKE(ID, ‘^[[:punct:]]*$’)

■ 한글을 포함하는 문자열, REGEXP_LIKE(id, ‘[가-힝]’)

■ 한글만 존재하는 문자열, REGEXP_LIKE(id, ‘^[가-힝]*$’)

■ 숫자가 연속으로 2개이상인 문자열, REGEXP_LIKE(id, ‘[0-9]{2}’)

■ 숫자나 소문자로 시작하는 문자열, REGEXP_LIKE(id, ‘^[0-9]|^[a-z]’)

■ 숫자로 시작하지 않는 문자열, REGEXP_LIKE(id, ‘^[^0-9]’)

■ 숫자나 소문자로 끝나는 문자열, REGEXP_LIKE(id, ‘[0-9]$|[a-z]$’)

■ 특수문자 ‘!’나 ‘*’가 들어가는 행, REGEXP_LIKE(id, ‘\!|\*’)

http://blog.iotinfra.net/?p=2497

 

select cust_email, REGEXP_SUBSTR(cust_email, '[^@]+') "CUST_ID" from customers

where nls_territory = 'ITALY'

and rownum <= 5;

CUST_EMAIL CUST_ID

Margret.Powell@ANI.COM Margret.Powell

Margrit.Garner@STILT.COM Margrit.Garner

Maria.Warden@TANAGER.COM Maria.Warden

select REGEXP_REPLACE('Oracle is the data information company','(){2,}',' ') from dual;

REGEXP_REPLACE('ORACLEISTHEDATAINFORMATIONCOMPANY','(){2,}','')

O r a c l e i s t h e d a t a i n f o r m a t i o n c o m p a n y

select REGEXP_REPLACE('Oracle is the data information company','( ){2,}',' ') from dual;

REGEXP_REPLACE('ORACLEISTHEDATAINFORMATIONCOMPANY','(){2,}','')

Oracle is the data information company

전화번호 표기법 변경 ( 650.507.9833 => 650)507-9833 으로 변경 )

select phone_number,

REGEXP_REPLACE(phone_number, '([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})', '\1) \2-\3') "NEW_PHONE_NUM" from employees;

// [[:digit:]]{3} 10 진수 세 자리, \. 은 . 이 부호라는 의미 <= \n, \t, \(, \), ...

관련글 더보기