使用PostgreSQL regexp_replace函数删除连续重复的字符

时间:2016-08-16 04:47:33

标签: regex postgresql

使用正则表达式删除所有连续重复的字符。

在Javascript中,这很有效:

txt='aaa bbb 888 bbb ccc ddd'.replace(/(?!(?!(.)\1))./g,'');

返回'a b 8 b c d'

如何使用Posgresql regexp_replace函数执行此操作? 这不会起作用:

SELECT regexp_replace('aaa bbb 888 bbb ccc ddd',E'(?!(?!(.)\\\\1)).','g');

$ psql -c "SELECT regexp_replace('aaa bbb 888 bbb ccc ddd',E'(?!(?!(.)\\1)).','g');"
     regexp_replace      
-------------------------
 aaa bbb 888 bbb ccc ddd
(1 row)

$ psql -c "SELECT regexp_replace('aaa bbb 888 bbb ccc ddd','(?!(?!(.)\1)).','g');"   
ERROR:  invalid regular expression: invalid backreference number

我做错了什么?

1 个答案:

答案 0 :(得分:2)

有一个similar SO question可以帮助您获得答案:

SELECT regexp_replace('aaa bbb 888 bbb ccc ddd', '(.)\1{1,}', '\1', 'g');
 regexp_replace 
----------------
 a b 8 b c d
(1 row)

它使用backreference来捕获重复字符组。