我是正则表达式的新手。我想将 (,),[,] 之类的任何文本字符串符号替换为连字符(例如):
SELECT REGEXP_REPLACE ('(<FIO>)', '(', '-') FROM dual;
这给了我 ORA-12725 错误。
请解释一下,怎么了?谢谢。
要替换符号,请使用该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>)]