1

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

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

这给了我 ORA-12725 错误。

请解释一下,怎么了?谢谢。

4

1 回答 1

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>--

更新:如果您只想替换第一个符号,则 translate 将不起作用。相反,使用:

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

REG
---------
-(<FIO>)]
于 2013-04-17T08:23:25.590 回答