2012-08-28 25 views
2

我想用正則表達式提取在Oracle字符串的下面部分中提取字符串的一部分:使用REGEXP_SUBSTR當它包含(和)

String: FN_SUM(ACCRUED_INTEREST) 
Output expected: ACCRUED_INTEREST 

我嘗試:

select regexp_substr('FN_SUM(ACCRUED_INTEREST)','([^)]') from dual; 

這給出了我ORA-12725錯誤。

使用正則表達式的任何溶液,將不勝感激。

+1

你只是想刪除的文字上的'FN_SUM'?或者是你想建立一個更一般的正則表達式來刪除,也就是說,任意函數的名字呢? –

回答

6

嘗試:

select regexp_replace('FN_SUM(ACCRUED_INTEREST)', '(.*)?\((.*)?\)(.*)?$','\2') from dual; 
+0

Thanks.It的作品。不知道替換可以解決它...但是,這有可能解釋這一點嗎?我想知道你是怎麼想出來的! – Casey

+0

的?使它不貪婪。所以,(。*)?\(匹配FN_SUM((。*)?\)匹配ACCRUED_INTEREST,和(。*)?$匹配所有剩餘。在\ 2抓住的第二場比賽(裏面輸入括號的部分) – tbone

+0

感謝您的解釋......心動不如行動! – Casey

0

爲什麼不使用常規的更換

select replace(replace('fn_sum(value)' 
       , substr('fn_sum(value)', 1, instr('fn_sum(value)', '('))) 
       , ')') 
    from dual 
+0

我已經知道這一點可以用常規SUBSTR /替換/ INSTR來完成。但是,想知道做正則表達式的方式。 – Casey