You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用REGEXP_REPLACE按指定条件替换重复出现的单词

错误点说明

  • !~*是PostgreSQL的正则匹配操作符,仅用于WHERE条件做匹配判断,不能作为regexp_replace函数的匹配模式参数
  • 原有正则没有区分需要保留的第一个test和需要替换的后续test,逻辑完全不匹配需求
  • 拼写错误:目标替换值successful少写了字母s,写成了succesful

正确实现代码

如果使用PostgreSQL 9.6及以上版本,支持可变长度正向环视,可以直接用极简写法:

SELECT regexp_replace(''') test test test', '(?<=\) test.*)\mtest\M', 'successful', 'g');

如果是更低版本的PostgreSQL,用嵌套写法兼容所有版本:

SELECT regexp_replace(
    ''') test test test',
    '(\) test)(.*)',
    '\1' || regexp_replace('\2', '\mtest\M', 'successful', 'g'),
    'gi'
);

逻辑说明

  1. 极简写法通过正向环视规则,匹配所有前面已经出现过) test的独立test单词,直接批量替换为successful
  2. 兼容版本先将字符串拆为两部分:开头固定要保留的) test(捕获组1)、第一个test之后的所有剩余内容(捕获组2),再单独把捕获组2里所有test替换为successful,最后拼接两部分内容得到结果

两种写法输入') test test test都会输出目标结果') test successful successful,后续不管有多少个test都会被正确替换。

内容的提问来源于stack exchange,提问作者SamuelFernandes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:06:04