2013-10-17 152 views
0

我想用REGEXP_REPLACE函數替換字符串中的方括號。即使我逃避這些chracters它不會取代用oracle替換字符串的方括號REGEXP_REPLACE函數

select regexp_replace('VMI[[DATA]]INFO', '[\[\]]', '_') from dual; 

結果

VMI[[DATA]]INFO 

我們怎樣才能做到這一點?我錯過了什麼嗎?

回答

4

你可以這樣說:

select regexp_replace('VMI[[DATA]]INFO', '\[|\]', '_') from dual; 

但我不認爲這都是必須的正則表達式,你也可以使用翻譯

select translate('VMI[[DATA]]INFO', '[]', '__') from dual; 

Here is a sqlfiddle demo

+0

作爲開發人員有普遍傾向於使用正則表達式進行替換,並不知道oracle的translate()函數。現在我按照您的建議使用translate()。謝謝 – Pokuri

1

內傾性格類,你不需要逃脫。特殊規則適用於 - ]及^,原因很明顯(見例如List of metacharacters for MySQL square brackets

所以你的情況,你可以使用

select regexp_replace('VMI[[DATA]]INFO', '[][]', '_') from dual; 

,但我同意@ABCade - 定期expresssions是矯枉過正這個。

相關問題