본문 바로가기

IT관련

오라클 정규표현식 함수 regexp_instr, regexp_substr 샘플예제 (문자열의 위치 찾기, 추출하기)

Oracle Database 에 있는 일반 문자열 함수 instr(), substr() 에 Regular Expression(정규식)을 쓸 수 있도록 한 것이 regexp_instr(), regexp_substr() 입니다.

기존에 instr() 이 문자열이 나타나는 위치를 리턴하고, substr() 함수가 문자열내에 일부를 잘라내는 기능을 가지고 있는데, regexp_instr(), regexp_substr() 도 똑같습니다.

 

regexp_instr() 함수의 구문(Syntax)은 다음과 같습니다.

 

regexp_substr() 함수의 구문(Syntax)은 다음과 같습니다.

 

 

source_char : 대상 문자열

pattern : 정규표현식 패턴

position : 문자열내에서 (패턴을 체크할) 처음 시작 위치

occurrence : 몇번째 일치하는 건지

return_opt : 0 or 1 ( 0: 일치하는 문자열 시작위치(default),  1: 일치하는 문자열 다음 일치하는 시작위치)

match_param : 'i' (대소문자 무시),  'c' (대소문자 구분)

subexpr : 위에 pattern 에서 여러 패턴들이 괄호( )로 묶여있는 경우 어느 것을 적용할지를 나타냄.

    ex) pattern 이 '(123)(4(56)(78))' 인 경우,

        첫번째 서브패턴은 123 이고,

        두번째 서브패턴은 45678 이고,

        세번째 서브패턴은 56 이고,

        네번째 서브패턴은 78 임.

 

 

예제를 통해서 사용법을 확인해보면,

 

 

문자열내에서 특정 패턴과 일치하는 문자열의 (시작위치 찾기) / (추출하기)

[^ ] 는 공백이 아닌 문자들을 가리키고,  ( 여기서 ^ 는  [ ] 안에 사용되었으므로 처음이 아니라, 부정의 의미 )

+ 는 앞의 문자(공백이 아닌)가 1번이상 반복됨을 의미합니다.

결국 공백으로 구분된 단어 하나씩을 찾는 것인데, 1 (첫번째 캐릭터) 부터 검색해서, 6 번째 단어가 해당 됩니다.

 

 

♣ 열거된 패턴들중에서 n 번째 패턴과 일치하는 문자열의 (시작위치 찾기) / (추출하기)

regexp_instr() 과 regexp_substr() 함수는 아규먼트가 거의 비슷한데, 5번째 인자인 return_opt 만 다릅니다.

패턴문자열 '(123)(4(56)(78))' 에서 2번째 서브패턴은 45678 입니다.

 

 

문자열에서 Email 주소가 들어있는지 체크 / 이메일 주소만 분리

위에서는 좀 특이하게 '\w' 를 썼는데, 이건 Perl 스타일 정규표현식 문자입니다.

자세한 것은 여길 참조하세요 ==> 정규 표현식 - 위키백과

 

\w 는 알파벳문자들과 숫자들을 포함합니다.  [:alnum] 과 같습니다.

\w 대신 [:alnum] 을 써도 똑같이 조회됩니다.

 

+ 는 앞의 문자나 패턴이 1번 이상 반복된다는 것을 의미합니다.

마지막 부분에 (\.[[:alnum:]]+)+ 에서 맨끝의 + 는 앞의 패턴이 1번이상 반복됨을 의미합니다.

즉, abc123@foo.co.kr 와 같이 @ 뒤에 . 이 두번 나오는 경우도 포함하기 위함입니다.

 

 

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