如何使用 REGEXP_REPLACE 替换特定条件下的重复单词?
How can I replace a duplicate word in a specific condition using REGEXP_REPLACE?
我基本上需要在某个条件下替换一个重复的词,但是这个词在整个字符串中出现了很多次。那么我该如何转换它:
') test test test'
进入这个:
') test successful successful'
我尝试使用这个和它的一些其他变体,但 none 有效:
SELECT regexp_replace(') test test', '!~*[)] test|test)', 'succesful','gi')
您要查找的内容通常需要一个支持可变长度后视的正则表达式引擎,因为只有出现的 test
后面至少出现一次 test
才会被替换。
要解决 PostgreSQL 中缺少此类支持的问题,您可以将第一次出现的 test
替换为在任何给定输入中极不可能出现的虚拟文本,然后继续替换test
的其余出现次数为 successful
,最后将虚拟文本替换回 test
:
SELECT replace(replace(regexp_replace(') test test test', ' test', '!!dummy!!'), ' test', ' successful'), '!!dummy!!', ' test')
我基本上需要在某个条件下替换一个重复的词,但是这个词在整个字符串中出现了很多次。那么我该如何转换它:
') test test test'
进入这个:
') test successful successful'
我尝试使用这个和它的一些其他变体,但 none 有效:
SELECT regexp_replace(') test test', '!~*[)] test|test)', 'succesful','gi')
您要查找的内容通常需要一个支持可变长度后视的正则表达式引擎,因为只有出现的 test
后面至少出现一次 test
才会被替换。
要解决 PostgreSQL 中缺少此类支持的问题,您可以将第一次出现的 test
替换为在任何给定输入中极不可能出现的虚拟文本,然后继续替换test
的其余出现次数为 successful
,最后将虚拟文本替换回 test
:
SELECT replace(replace(regexp_replace(') test test test', ' test', '!!dummy!!'), ' test', ' successful'), '!!dummy!!', ' test')