본문 바로가기

IT관련

오라클 정규식, 정규표현식(Regular Expression) 이란? 그리고 사용방법.

정규표현식(Regular Expression, 레귤러 익스프레션)이라고 하면 너무 어렵게 느껴지지만 우리가 알게 모르게 지금껏 많이 써오던 것입니다.

도스창, 윈도우즈의 커맨드창에서 *(별표), ?(물음표) 같은 기호들을 파일 찾을때 많이 사용해왔었는데, 바로 이게 정규표현식의 일부입니다.   예) dir A*  (A로 시작하는 모든 파일 찾기)

Linux 나 Unix 시스템에서도 vi 에디터에서 ^ 는 첫문자, $ 는 마지막 문자를 가리키는데, 이것도 정규표현식의 일부입니다.

 

이런 정규표현식에 대한 설명 및 문법은 위키백과에 아주 상세하게 잘 정리되어 있습니다.

 

    참고 >> 정규 표현식 - 위키백과, 우리 모두의 백과사전

 

위 위키백과의 설명을 보면, *, ?, ^, $ 정도가 아니라, [] {} () . + 등 은근히 꽤 많은 것을 확인할 수 있습니다.

이렇게 많은 것들을 조합해서 아주 다양한 표현이 가능한데,

문자열에서 특정한 형태의 포맷을 가진 문자열을 찾으려고 할때, 이런 정규표현식을 이용하면 가능하게 됩니다.

 

오라클에서도 이러한 정규표현식(Regular Expression)을 지원하고 있습니다.

아무 함수나 연산자에서 막 사용할 수 있는 것은 아니고, 아래와같이 5개만을 지원하고 있습니다.

 

regexp_like (문자열, 패턴, ...)      : like 와 유사. 정규표현식을 사용할 수 있는 like
regexp_count (문자열, 패턴, ...)   : 패턴에 일치하는 문자열 갯수 카운트
regexp_instr (문자열, 패턴, ...)     : 문자열내에서 패턴에 일치하는 시작 위치를 찾아줌
regexp_substr (문자열, 패턴, ...)   : 문자열내에서 패턴에 일치하는 문자열을 추출
regexp_replace (문자열, 패턴, ...) : 문자열내에서 패턴에 일치하는 문자열을 다른 문자열로 대체

 

5가지 모두 문자열과 관계되어 있습니다. 모두 기본 처리대상이 문자열 입니다.

like, count, instr, substr, replace 들은 오라클에서 원래부터 지원하던 것들인데, 얘네들을 정규표현식을 지원하도록 업그레이드 시켰다고 보면 됩니다.

 

위 5가지 중에 regexp_like 는 like 처럼 조건문(condition)에만 사용가능하고, 나머지 4 개는 Where 조건문과 Select 문 모두에서 사용가능합니다.

 

오라클 정규표현식을 이용하면, 아래와 같이 다소 복잡한 경우도 간단히 조회 가능합니다.

 

"Steven" 또는 "Stephen" 을 찾는건데, 중간에 v 또는 ph 인 것을 찾는 겁니다. ^S는 첫번째 문자는 S로 시작함을 의미하고, n$ 는 마지막 문자는 n 으로 끝나는 것을 의미합니다.

 

오라클에서 지원하는 정규표현식 구문, 오퍼레이터는 "SQL Language Reference" 매뉴얼에 나와있습니다.

오라클은 POSIX Regular Expression 표준과 펄(Perl) 스타일 Regular Expression 을 지원하고 있습니다.

 

 

▶ 참고) regexp_like 샘플예제 (정규표현식 기본 응용)

▶ 참고) regexp_like 샘플예제 (전화번호 포맷이 일치하지 않는 데이터 찾아내기 SQL문)

▶ 참고) regexp_count 샘플예제 (문자열내에 반복 패턴 카운트)

▶ 참고) regexp_instr, regexp_substr 샘플예제 (문자열의 위치 찾기, 추출하기)

▶ 참고) regexp_substr 샘플예제 (http URL 문자열 추출하기)

▶ 참고) regexp_replace 샘플예제 (문자열 바꿔치기, 치환)

▶ 참고) regexp_replace 샘플예제 (Email 주소에서 @앞부분만 다른 문자열로 바꿔치기 SQL문)

▶ 참고) regexp_replace 샘플예제 (날짜 포맷 변경하기 SQL문)