使用正则表达式删除所有连续的重复字符。
在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/