반응형
출처: http://www.statwith.pe.kr/ORACLE/functions114.htm


REGEXP_INSTR

문법

MAIN

regexp_instr::=
Description of regexp_instr.gif follows

그림 설명
 

목적

MAIN

지정한 조건(정규 표현)을 만족하는 부분의 최초의 위치(무슨 문자인지)를 돌려줍니다. 또한, 검색을 시작하는 시작 위치를 지정하는 것도 가능합니다

REGEXP_INSTR함수는 정규 표현 패턴에 대한 문자열을 검색하는 INSTR함수의 기능을 확정한 것이다. 이 함수는 입력 문자 세트에 의해 정의되는것과 같은 문자를 이용하여 문자열을 평가한다. 그것은 return_option인수의 값에 의존하는 일치되는 substring의 처음과 종료 위치를 나타내는 정수를 반환한다. 만약 일치하는 값이 발견되지 않으면, 함수는 0을 반환한다.

이 함수는 POSIX 정규 표현 규격과 유니코드 정규 표현 가이드 라인을 따른다.

  • source_string는 검색 값으로 다루어지는 문자 표현이다. 보통 문자열이고, CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB,NCLOB 데이터중에 하나이다.

  • pattern은 정규 표현이다. 이것은 일반적으로 텍스트 문자이고, CHAR,VARCHAR2,NCHAR,NVARCHAR2의 데이터형이다. 최대 512바이트를 지정할수 있다. 만약 pattern의 데이터형이 source_string의 데이터형과 다른 경우에는, 오라클 데이터베이스는 pattern을 source_string의 데이터형으로 변환한다. pattern에서 지정할수 있는 연산자의 리스트는  Appendix C, " Oracle Regular Expression Support" 참조.

  • Position은 오라클이 검색을 시작하는 source_string의 문자를 나타내는 양의 정수이다. 기본값은 1이고, source_char의 처음 문자를 검색을 시작한다.

  • occurrence은 source_string에서 pattern의 발생하는 것 중에서 나타나는 양의 정수이다. 기본값은 1이고, 오라클이 pattern의 처음 발생하는것을 검색하는것을 의미한다.

  • return_option은, 오라클이 발생하는 것과 관련한 것을 지정할수 있다.

    • 만약 0을 지정하면, 오라클은 발생의 첫 문자의 위치를 반환한다. 기본값이다.

    • 만약 1을 지정하면, 오라클은 발생한것의 다음 문자의 위치를 반환한다.

  • match_parameter은 함수의 기본적 일치하는 행동을 변경하기 위한 텍스트 문자이다. match_parameter에 대한 다음 값의 하나 이상을 지정할수 있다.

    • 'i'는 대소문자를 구별하지 않는다.

    • 'c'는 대소문자를 구별한다.

    • 'n'은 새줄 문자와 일치하는 match-any-character문자인 period(.)을 허용한다. 만약 이 파라미터를 생략하면, 피어리드는 새줄 문자와 일치하지 않는다.  (http://pcrc.hongik.ac.kr/~progman/docs/regexp/node6.html)

    • 'm'는 다중 라인과 같은 소스 문자열을 처리한다. 오라클은 소스 문자에 임의의 라인에 선두와 끝으로써 ^과 $을 해석한다. 만약 이 파라미터를 생략하면, 오라클은 단일행으로써 소스 문자열을 처리한다.

    만약 복수의 모순된 값을 지정하면, 오라클은 마지막 값을 이용한다. 예를들어, 만약 'ic'를 지정하면, 오라클은 대소문자를 구별하는 검색을 한다. 만약 위에서 보이는것과 다른 문자를 지정하면, 오라클은 에러를 발생한다.

    만약 match_parameter를 생략하면,

예제

MAIN

다음 예제는 문자열을 조사하고, 하나 이상의 공백 이외의 문자의 발생을 검색한다. 오라클은 문자열에서 처음 문자로부터 검색을 시작하여, 하나 이상의 비공백 문자의 6번째 발생의 시작 위치를 반환한다.

SELECT
  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',
               '[^ ]+', 1, 6) "REGEXP_INSTR"
FROM DUAL;

REGEXP_INSTR
------------
          37
음 예제는 문자열을 조사하고, 대소문자를 구별하지 않고, s,r,p로 시작하여, 임의의 6번째 알파벳 문자가 발생하는 단어를 검색한다. 
오라클은 문자열에서 3번째 문자에서 검색을 시작해서, 대소문자의 s,r,p로 시작되는 7 문자의 단어가 2번째 출현한 후의 문자열내의 위치를 반환한다.
SELECT
  REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',
               '[s|r|p][[:alpha:]]{6}', 3, 2, 1, 'i') "REGEXP_INSTR"
FROM DUAL;

REGEXP_INSTR
------------
          28

이 함수는 패턴의 시작 위치를 반환하며, 따라서 INSTR 함수와 유사한 형태로 동작합니다. REGEXP_INSTR함수의 사옹 방법은 표 6에서 확인할 수 있습니다. 두 함수의 가장 중요한 차이는 REGEXP_INSTR를 이용하는 경우 특정 문자열이 아닌 패턴을 지정할 수 있으며, 따라서 훨씬 유연한 검색이 가능하다는 사실입니다. 다음 예에서는 REGEXP_INSTR을 사용하여 Joe Smith, 10045 Berry Lane, San Joseph, CA 91234문자열에서 5 개의 숫자로 구성된 우편 번호 패턴의 시작 부분을 반환하고 있습니다. 정규 표현식 [[:digit:]]{5}를 사용하는 경우 우편 번호가 아닌 집 주소 번호의 시작 위치를 얻게 됩니다 (처음으로 검색되는 5 개 연속 숫자 패턴이 10045이기 때문입니다). 따라서 $ 메타문자를 사용하여 표현식의 앵커를 라인 끝부분으로 지정해야 합니다. 이렇게 하면 집 주소 번호에 관계없이 우편 번호의 시작 위치를 얻을 수 있습니다.

SELECT REGEXP_INSTR('Joe Smith, 10045 Berry Lane, San Joseph, CA 91234',
       '[[:digit:]]{5}$')
       AS rx_instr
  FROM dual
  RX_INSTR
----------
        45

B(b)또는 C(c)가 2번 이상 문자열에 들어 있는 데이터 검색

SELECT * FROM TEST_REGEX WHERE REGEXP_INSTR(VALUE, '[b-c]', 1, 2, 0, I)>0;

반응형

+ Recent posts