2013-08-01 2 views
1

Oracle 11gR2입니다.REGEXP_SUBSTR : [] 포함 [] 사이의 문자열 부분 추출

[]을 (를) 포함하여 '['과 '] 사이에 텍스트를 추출하려고합니다.

예 :

select regexp_substr('select userid,username from tablename where user_id=[REQ.UID] and username=[REQD.VP.UNAME]','\[(.*)\]') from dual 

출력 : 필요

[REQ.UID] and username=[REQD.VP.UNAME] 

출력 :

[REQ.UID][REQD.VP.UNAME] 

내게 필요한 출력을 얻을하는 방법을 알려 주시기 바랍니다.

감사 & 감사합니다, Bishal

답변

2

방금 ​​충분해야 다음 다음 []의 두 사건을하려한다면, 간단합니다. ? . *에? 마지막으로 욕심을 덜어주기에 욕심이 없다는 뜻입니다.]

select 
regexp_replace('select userid,username from tablename where user_id=[REQ.UID] and username=[REQD.VP.UNAME]' 
,'.*(\[.*?\]).*(\[.*?\]).*','\1\2') 
from dual 
; 
+0

감사합니다. 존! 잘 작동합니다 :) – Bishal

+0

또 다른 작은 의심 : 같은 예제에서 Multiline을 어떻게 처리합니까? – Bishal

+0

멀티 라인의 경우'regexp_replace'의'match_parameter'를 사용하여 개행을 임의의 문자로 허용해야합니다. 그래서,'regexp_replace ('user_id = [REQ.UID]와 username = [REQD.VP.UNAME]', '. * (\ [. *? \]). * (\ [. *? \]). * ','\ 1 \ 2 ', 1,0,'n ')'- [REGEXP_REPLACE] 참조 (http://docs.oracle.com/cd/B28359_01/server.111/b28286) /functions137.htm)을 참조하십시오. –

1

내가 Oracle 사용자 아니에요,하지만 docs의 빠른 열람에서, 나는이 가까이 있어야한다고 생각 : 그것보다 훨씬 지저분 보이는

REGEXP_REPLACE('select userid,username from tablename where user_id=[REQ.UID] and username=[REQD.VP.UNAME]', 
       '^[^\[]*(\[[^\]]*\])[^\[]*(\[[^\]]*\])$', '\1 \2') 

입니다.

패턴은 다음과 같습니다

  • ^[^\[]* 캡처 모든 자까지 모든 것을 캡처 [<not "]">]
  • [^\[]* 같은 1 아무것도 그룹에 첫 번째 [
  • (\[[^\]]*\]) 캡처 (하지만 제외)까지 (너트 포함하지 않음) 다음에 [
  • (\[[^\]]*\]) st37 끝 부분에서 [<not "]">]과 같은 그룹 2로 캡처합니다. 그런 다음 교체를

을 보내고 그냥 <grp 1> <grp 2>