使用正则表达式删除所有连续重复的字符。
在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
我做错了什么?
答案 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来捕获重复字符组。