본문 바로가기

IT관련

오라클 정규표현식 함수 regexp_substr 샘플예제 (문자열내에서 http URL 만 추출하는 SQL문)

앞에서 Oracle 정규표현식 함수 regexp_instr(), regexp_substr() 함수의 기본적인 사용법을 살펴봤습니다.

이번에는 regexp_substr() 함수를 사용해서 http URL 문자열만 분리하는 정규표현식을 만들어보겠습니다.

 

테스트를 위해 아래와 같이 테스트 테이블을 만듭니다.

 


-- 테스트 테이블 생성
create table DOC_2 (
  content1  varchar2(4000)
);

insert into DOC_2 values ('http://docs.oracle.com/database/121/SQLRF/functions162.htm#SQLRF06300');
insert into DOC_2 values ('http://jack-of-all-trades.tistory.com/381');
insert into DOC_2 values ('Database Download => http://www.oracle.com/downloads/#category-database');
commit;

 

http URL 이 다른 문자열들과 섞여있고, 뒤에 서브디렉토리가 붙어 있는데, 이것들을 제거하고 순수하게 메인 http URL 만 분리해내려고 합니다.

 

regexp_substr(content1, 'http://[[:alnum:]]+(\.[[:alnum:]]+)+/?') 로 기본적인 조회가 가능합니다.

 

패턴문자열을 하나씩 나눠서 살펴보면,

먼저 http:// 문자열이 반드시 앞에 나와야 하고,

[[:alnum:]]+ 는  영문자/숫자가 1번이상 나오는 것을 의미하고,

(\.[[:alnum:]]+)+ 는 점(.) 으로 시작하고 영문자/숫자가 1번이상(+) 나오는 패턴이 다시 1번이상(+) 반복되는 것을 의미하고,

/? 는 마지막에 슬래시(/) 문자가 0번 또는 1번 나옴을 의미합니다.

 

그런데, 결과에서 2번째처럼 문자열 중간에 대쉬(-)가 들어있는 경우에는 안나오고 있습니다.

대쉬(-) 문자는 [:alnum] 문자셋에 포함되지 않기 때문입니다.

대괄호 [ ] 안에 [:alnum] 뒤에 그냥 붙여주기만 하면 됩니다.  =>  [[:alnum]-]

대괄호는 '|' (or) 의 의미이기 때문입니다.

 

이렇게 해서 전부다 조회되는 것을 확인할 수 있습니다.

 

 

▶ 참고 : 오라클 정규표현식(Regular Expression) 소개 메인 페이지