본문 바로가기

IT관련

오라클 정규표현식 함수 regexp_replace 샘플예제 (Email 주소에서 @앞부분만 다른 문자열로 바꿔치기 SQL문)

지난번에 Oracle Regular Expression 함수 regexp_replace( ) 의 기본적인 기능을 살펴봤습니다.

이번에는 조금 복잡한 경우를 구현해보고자 합니다.

문자열내에 Email 주소가 들어있고, 그 이메일주소에서 @뒷부분은 그대로 남겨두고 앞부분만 다른 문자열로 바꿔치기 하는 것입니다.

 

지난번 regexp_instr( ), regexp_substr( ) 에 대해 설명하면서 email 주소만 찾아내는 부분을 다뤘었는데, 그것을 응용해서 이용하면 됩니다.

 

먼저, 패턴에 대해서 설명하자면,

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

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

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

 

이것을 좀 응용해서, 아래와 같이 사용하면 됩니다.

패턴문자열에 @ 기준으로 앞뒤로 괄호 ( ) 가 추가되었고, 3번째 인자로 대체문자열이 들어갔습니다.

 

 

패턴문자열에서,

@ 를 기준으로 앞쪽 패턴을 괄호 ( ) 로 쌌고, @를 포함한 뒤쪽도 한번더 괄호 ( ) 로 쌌는데 이게 중요합니다.

 

email 에서 @ 뒤쪽에 있는 부분 foo.bar,  foo.co.kr 은 그대로 유지해야 하는데,

그러면 앞에 패턴에서 찾아낸 데이터를 그대로 받아와야 합니다. 그게 바로 \2 입니다.

첫번째 일치하는 패턴은 \1, 두번째 일치하는 패턴은 \2, .... \9, \10, \11 ....

그런데, 이렇게 \n 의 변수를 사용하려면, 앞에 패턴에서 괄호 ( )로 묶어서 구분해줘야 합니다.

 

대체문자열 'ZZZZZ99999\2' 는 첫번째 일치패턴에 대한 대체문자열은 ZZZZZ99999 이고,

두번째 일치패턴에 대한 대체문자열은 \2 로 그냥 그대로 가져오라는 것입니다.

 

 

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