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

在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

我究竟做错了什么?

最佳答案

有一个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捕获重复字符组。

关于regex - 使用PostgreSQL regexp_replace函数删除连续的重复字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38966825/

10-13 01:51