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) 소개 메인 페이지
'IT관련' 카테고리의 다른 글
오라클 정규표현식 함수 regexp_replace 샘플예제 (문자열 바꿔치기, 치환) (0) | 2020.12.10 |
---|---|
오라클 정규표현식 함수 regexp_substr 샘플예제 (문자열내에서 http URL 만 추출하는 SQL문) (0) | 2020.12.10 |
오라클 정규표현식 함수 regexp_count 함수 샘플예제 (문자열내에 반복 패턴 카운트) (0) | 2020.12.09 |
오라클 like 구문 업그레이드 regexp_like 샘플예제 (전화번호 포맷이 일치하지 않는 데이터 찾아내기 SQL문) (0) | 2020.12.09 |
오라클 like 구문 업그레이드 regexp_like 샘플예제 (정규표현식 기본 응용) (0) | 2020.12.09 |