[oracle] 정규식REGEXP_INSTR 함수 :: 개발/일상_Mr.lee

[oracle] 정규식REGEXP_INSTR 함수

Posted by Mr.mandu.
2016. 4. 9. 20:43 개발/DB

REGEXP_INSTR 함수

특정 패턴이 출현하는 첫 위치 값을 반환하는 함수입니다.


전체 데이터 목록

SELECT* FROM TEST




'?'의 위치를 찾아낸다.

select text, regexp_instr(text, '\?') AS "? 위치" FROM TEST

아래의 화면을 보시면 6행의 값이 1인것을 확인할수 있습니다.


첫 시작이 공백이 아닌('[^ ]') 부분중에서

1번 글자('aa')부터 검사해서 3번째 위치가 출현되는 자리를 찾아라

select regexp_instr('aa bb cc dd ee', '[^ ]+', 1, 3)  FROM dual

[^ ] 이 표시가 무슨 의미인지 몰라서 찾아봤습니다.  '공백이 아닌!' 이라는 뜻입니다.

의미를 해석해보면 aa bb cc ee 에서 공백이아닌 글자는 aa,bb,cc,ee를 뜻하는데 여기서 3번째인 첫번째c의 위치를 의미 합니다.



regexp_instr(text, '표현식', 검색시작위치, 찾는패턴순번, offset) AS "offset 0",

SELECT text, 

regexp_instr(text, '[A-Z]{3}', 1, 1, 0) AS "offset 0",

regexp_instr(text, '[A-Z]{3}', 1, 1, 1) AS "offset 1",

regexp_instr(text, '[A-Z]{3}', 1, 1, 0, 'i') AS "offset i"        i=대소분자구분안함 이라는 뜻이다.

FROM TEST

offset의 사전적 의미는 '상쇄'라는 의미인데 0은 '시작'을 의미하고 1은 '끝나는 부분'을 의미합니다.

첫행을 보시면 offset 0 =1, offset 1 =4로 출력되어 있는데요. 즉, 첫번째 자리에서 시작하고

C의 자리수인 3에서 상쇄되고 1이 시작하는 자리 4를 출력합니다.


첫 글자가 공백이 아니고 abc로 시작되는 두 번째 글자의 첫 위치를 표시

select regexp_instr('ABC ADE ABC ADF', '[^ ]+[ABC]', 1, 2)  FROM dual