如何使用 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')

演示:https://extendsclass.com/postgresql/7d9cfe4