【问题标题】:Add escape character in front of specific characters [oracle sql]在特定字符前添加转义字符 [oracle sql]
【发布时间】:2020-02-18 10:33:04
【问题描述】:

我正在寻找的是一些正则表达式,它将在某些字符前面的 varchar 列中添加 \\ 字符(例如 "\ ... N 个字符)。

示例:James"Bond\007 -> James\"Bond\\\007

我可以用 N 替换来做到这一点,但如果 oracle 提供它,我正在寻找更优雅的解决方案。

REPLACE(REPLACE(ColumnX, '\', '\\'), '"', '\"')

P.S 需要 oracle 12.1 和 oracle 12.2

【问题讨论】:

  • 提示:(1) 字符类 (2) 反向引用(在正则表达式中)
  • 你看过REGEX_REPLACE吗?在您的情况下可能有用。
  • @Lucas 我有但没有,它可以将所有 x|y|z 字符替换为 k,而不是 k[x|y|z]
  • 演示字符类和反向引用。看到这个db fiddle
  • 啊现在我明白了@Abra,感谢您帮助我了解如何使用反向引用:)

标签: sql oracle


【解决方案1】:

您可以使用反向引用:

select regexp_replace ( 
         'James"Bond\007',
         '("|\\)', -- add all the characters you want to replace
         '\\\1'
       )
from   dual;

REGEXP_REPLACE('JAMES"BOND\007','("|\\)','\\\1')   
James\"Bond\\007   

请注意,您需要使用额外的反斜杠来转义正则表达式中的反斜杠!

【讨论】:

    猜你喜欢
    • 2015-12-06
    • 2015-07-06
    • 1970-01-01
    • 2021-09-14
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    相关资源
    最近更新 更多