【问题标题】:Regex remove all occurrences of multiple characters in a string正则表达式删除字符串中所有出现的多个字符
【发布时间】:2013-02-03 21:00:13
【问题描述】:

在我的 PostgreSQL 中,我想替换字符串中出现的所有字符 (;<>)

我的查询:

update table_name set text = regexp_replace(text, '/[(;<>)]+/g', '');

我认为我的正则表达式是错误的。谁能帮帮我?

【问题讨论】:

    标签: sql regex postgresql pattern-matching


    【解决方案1】:

    对于这个简单的案例,使用更快的translate()

    UPDATE tbl SET text = translate(text, '(;<>)', '');
    

    第二个参数中没有对应第三个参数的每个字符都被替换为空。

    正则表达式解决方案可能如下所示:

    regexp_replace(text, '[(;<>)]', '', 'g');
    

    基本元素是第 4 个参数 'g',用于替换“全局”而不是第一个匹配项。第二个参数是一个字符类。
    你走在正确的轨道上,只是regexp_replace() 的语法问题。

    提示UPDATE

    如果您不希望 所有 行被更改,我强烈建议调整您的 UPDATE 声明:

    UPDATE tbl
    SET    text =  translate(text, '(;<>)', '')
    WHERE  text <> translate(text, '(;<>)', '');
    

    这样可以避免(昂贵的)空更新。 (NULL 在这种特殊情况下会自动覆盖。)

    【讨论】:

    • 太棒了。是的,这正是我想要实现的。谢谢!
    • 实际上,OP 的正则表达式模式是正确的(它确实有 /g 标志),它应该在 Postgres 中写得有点不同。无论如何,关于translate 的观点非常好。
    • @raina77ow:是的,只是正则表达式的语法问题。我在示例中添加了括号,似乎 OP 也想替换它们。
    猜你喜欢
    • 2022-10-12
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多