如何在Oracle REGEXP_REPLACE函数中将括号替换为连字符?

时间:2013-04-17 08:13:21

标签: sql regex oracle

我是正则表达式的新手。我想将(,),[,]之类的任何文本字符串符号替换为连字符(例如):

SELECT REGEXP_REPLACE ('(<FIO>)', '(', '-') FROM dual;

这给了我ORA-12725错误。

拜托,解释一下,怎么了? 感谢。

1 个答案:

答案 0 :(得分:3)

要替换符号,请使用TRANSLATE函数,它比正则表达式函数更少处理器:

SQL> SELECT translate ('(<FIO>)', '()[]', '----') replaced FROM dual;

REPLACED
--------
-<FIO>-

正则表达式更通用,可以做更复杂的事情,但更昂贵。在这种情况下,通过专门的功能更有效地完成将一个字符替换为另一个字符。如果您真的想使用正则表达式,可以使用REGEXP_REPLACE

SQL> SELECT regexp_replace ('[(<FIO>)]', '[]()[]', '-', 1, 0) reg FROM dual;

REG
---------
--<FIO>--

更新:如果您只想替换第一个符号,则翻译将无效。相反,使用:

SQL> SELECT regexp_replace ('[(<FIO>)]', '[]()[]', '-', 1, 1) reg FROM dual;

REG
---------
-(<FIO>)]
相关问题