【问题标题】:How can I replace brackets to hyphens within Oracle REGEXP_REPLACE function?如何在 Oracle REGEXP_REPLACE 函数中将括号替换为连字符?
【发布时间】:2013-04-09 21:52:37
【问题描述】:

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

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

这给了我 ORA-12725 错误。

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

【问题讨论】:

  • 我相信你需要转义括号。
  • 你的意思是'/'符号吗?你能举个例子吗?

标签: sql regex oracle


【解决方案1】:

要替换符号,请使用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>)]

【讨论】:

  • 谢谢,文森特!但是,如果我只需要替换字符串中的第一次出现?
  • 这在您的问题中并不明显 =) 查看我的更新答案
  • 是的,我明白了,对不起)
  • 看来,我问错了问题..我会尽量详细解释..文森特,你能在我的电子邮件上写信给我吗? asv.mclarenfan@gmail.com 我写了我的函数的程序代码..
  • @Sergey - 文森特已经回答了您的问题以及您修改后的要求。如果您完全问错了问题,那么请再问一个问题,不要试图将它附加到这个问题上或显着改变这个问题的内容。
猜你喜欢
  • 2013-10-25
  • 2015-03-12
  • 1970-01-01
  • 2021-12-29
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多