블로그 이미지
모노마인드

Aiming for the Oracle Wizard

Rss feed Tistory
Oracle/SQL 2012.01.14 21:19

오라클에서의 정규표현식 간단 정리

정규표현식(Regular Expression, Regexp 또는 Regex 라고도 표현)은 특정한 규칙을 가진 문자열의 집합을 표현하는 형식 언어를 말합니다.
이 정규표현식을 C++, JAVA, SQL 등 많은 컴퓨터 언어에서 사용하고 있는데 어떤 문자열에서 특정 패턴의 문자열을 찾기 위해 사용합니다.
그리고 이 정규표현식을 특정 함수나 조건에 사용하면 패턴을 포함하는 문자열을 찾거나, 패턴의 위치값을 찾거나, 해당 패턴의 문자열을 다른 문자열로 변환하거나, 입력 받는 데이터에 대한 정합성 체크 등 아주 다양하게 활용할 수 있습니다. 
특히 오라클과 같은 데이터베이스에서는 정규표현식이 아주 유용하게 사용되고 있음은 주지의 사실이지요. 

오라클에서는 정규표현식 사용을 위해 아래와 같은 조건과 함수를 제공합니다.

REGEXP_LIKE    ─> regular expression condition
REGEXP_INSTR   ┐
REGEXP_SUBSTR  ┼> regular expression functions
REGEXP_REPLACE ┤
REGEXP_COUNT   ┘ (<- 11g)


정규표현식 조건인 REGEXP_LIKEWHERE, WHEN 처럼 조건절이나 CHECK 같은 제약조건식에 사용되고 나머지 정규표현식 함수는 일반 함수가 사용되는 곳에서 쓰면 됩니다.
정규표현식 함수는 대상 문자열에서 검색을 시작할 위치와 순서를 지정하는 파라미터를 추가로 넣을 수 있습니다.

특정 패턴은 메타 문자(메타 심볼 또는 정규표현식 연산자)로 정의되는데 오라클에서는 POSIX Operators와 PERL-Influenced Extensions to POSIX Standard 등 두 가지 형식을 지원합니다.

이런 메타 문자들을 이해하는 것은 대부분 어렵지 않은데 몇 가지는 세심하게 알고 있지 않으면 예상과 다른 결과를 얻게 됩니다. 아래에 정리해 보겠습니다.

* Or operator: |
  - 'ski|ull' = {'ski', 'ull'}
  - 'sk(i|u)ll' = {'skill', 'skull'}
  - 'ski|ull|ful' = {'ski', 'ull', 'ful'}
  - '^ski|ull$' = {'^ski', 'ull$'}

* Matching Character List operator: [ ]
    : 메타 문자들도 일반 문자로 취급, 예외) -, [: :], [. .], [= =]
  - '[a-d]' = {'a', 'b', 'c', 'd'}
  - '[skill]' = {'s', 'k', 'i', 'l'}
  - '[ski|ull]' = {'s', 'k', 'i', '|', 'u', 'l'}
  - '[[:alpha:]]' = {all alphabetic characters}
  - '[^skill$]'  <-- NonMatching Character List Operator

* NonMatching Character List operator: [^ ]
  - '[^a-d]' = {'a', 'b', 'c', 'd'를 제외한 모든 문자}
  - '[^ski|ull$]' = {'s', 'k', 'i', '|', 'u', 'l', '$'를 제외한 모든 문자}


아래의 여섯 정규표현식은 비슷해 보이지만 서로 다릅니다.

① regexp_like(string, 'ski|ull') 
② regexp_like(string, 'sk(i|u)ll')
③ regexp_like(string, '^ski|ull$')
④ regexp_like(string, '^sk(i|u)ll$')
⑤ regexp_like(string, '[ski|ull]')
⑥ regexp_like(string, '[^ski|ull$]')  


위 여섯 정규표현식의 의미와 차이를 알 수 있으신가요?

여섯 정규표현식 풀이



끝으로 문제 하나 풀어보지요.

아래와 같은 문자열이 있을 때

① Alex 
② Alax
③ Alexer
④ Alexendar
⑤ Alexender 


다음의 정규표현식을 만족하는 문자열은 무엇일까요?

'[^Ale|ax.r$]'



해답 보기



저작자 표시 비영리 동일 조건 변경 허락
신고

'Oracle > SQL' 카테고리의 다른 글

오라클에서의 정규표현식 간단 정리  (0) 2012.01.14
Graphic Syntax Diagram 읽는 법  (0) 2011.05.20
TOTAL 9,766 TODAY 1