正则表达式删除字符串中出现的所有多个字符

时间:2013-02-19 08:39:20

标签: sql regex postgresql pattern-matching

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

我的查询:

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

我认为我的正则表达式是错误的。任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:5)

对于这个简单的案例,使用更快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在此特定情况下会自动涵盖。)