【问题标题】:Oracle regular expression REGEXP_REPLACEOracle 正则表达式 REGEXP_REPLACE
【发布时间】:2018-08-17 22:20:11
【问题描述】:

我想替换特定的字符串格式(忽略出现在 ^ 之后的数字)。

例如: 在这里,我想替换所有出现的字符串[XYZ^abc^0^0],其中任何数字都可以代替^0^0,例如[XYZ^abc^0^0][XYZ^abc^20^10]等。

输入字符串:[XYZ^abc^0^1][dfgf^fgfgf^0^0][ggfgf^ererer^0^0][XYZ^abc^20^1][mkkfg^oorjj^0^0][XYZ^abc^0^0]

预期输出:[dfgf^fgfgf^0^0][ggfgf^ererer^0^0][mkkfg^oorjj^0^0]

我尝试了许多组合,包括以下组合,但均未成功:

SELECT
  REGEXP_REPLACE('[XYZ^abc^0^1][dfgf^fgfgf^0^0][ggfgf^ererer^0^0][XYZ^abc^20^1][mkkfg^oorjj^0^0][XYZ^abc^0^0]',
                 '[XYZ^abc^\^[[:digit:]]{1,}\^[[:digit:]]{1,}\]'
                 ) "REGEXP_REPLACE" from dual

感谢您的帮助!

谢谢!

【问题讨论】:

  • \[XYZ\^abc\^\d+\^\d+\] 替换为空。
  • 太棒了...非常感谢!它有效..!

标签: regex oracle


【解决方案1】:

您需要转义应按字面处理的方括号。您没有转义所有 ^ 字符,而是多了一个 ^ 字符。

另外,{1,} 可以写成+

SELECT
  REGEXP_REPLACE('[XYZ^abc^0^1][dfgf^fgfgf^0^0][ggfgf^ererer^0^0][XYZ^abc^20^1][mkkfg^oorjj^0^0][XYZ^abc^0^0]',
                 '\[XYZ\^abc\^[[:digit:]]+\^[[:digit:]]+\]'
                 ) "REGEXP_REPLACE" from dual

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 2021-05-22
    • 2017-05-13
    相关资源
    最近更新 更多