如何在oracle sql中使用regex替换转义括号

时间:2017-05-30 14:19:05

标签: sql oracle

我的查询未按预期运行:

SELECT REGEXP_REPLACE('This is testing data SIL(TM)T for once ', 
'SIL(TM)T', 'SIL<REFERENCE ID="8208" TYPE="trademark"/>T')as 
Newdescriptiontext from dual
输出应该是:

This is testing data SIL<REFERENCE ID="8208" TYPE="trademark"/>T for once

情况并非如此。需要指导。

2 个答案:

答案 0 :(得分:1)

尝试替换而不是regexp_replace

SELECT REPLACE('This is testing data SIL(TM)T for once ', 
'SIL(TM)T', 'SIL<REFERENCE ID="8208" TYPE="trademark"/>T')as 
Newdescriptiontext from dual;

答案 1 :(得分:1)

你只需要逃避括号:

SELECT REGEXP_REPLACE('This is testing data SIL(TM)T for once ', 
                       'SIL\(TM\)T', 'SIL<REFERENCE ID="8208" TYPE="trademark"/>T')as Newdescriptiontext
from dual

在正则表达式中,它们用于分隔“子表达式”,因此'(TM)'匹配'TM';如果你逃避它们,它们将被解释为普通字符,因此'\(TM\)'匹配'(TM)'