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

如何使用preg_replace仅去除单词内部的重复字符

解决单词内部连续重复字符去重问题

要实现仅去除单词内部的连续重复字符,同时保留独立成词的纯重复字符,可以通过正则环视断言精准匹配目标内容,避免误替换独立的重复单词。

核心思路

我们需要匹配的是处于单词中间的连续重复字符——即重复字符的前后必须都有其他字母(确保不是整个单词由单一重复字符构成)。利用正则的正向后顾和前瞻断言,能精准锁定这类场景。

实现代码

// 处理示例1:here bbb cca → here bbb ca
echo preg_replace('/(?<=[a-z])([a-z])\1+(?=[a-z])/', '$1', 'here bbb cca');

// 处理示例2:test hjjjja ppp → test hja ppp
echo preg_replace('/(?<=[a-z])([a-z])\1+(?=[a-z])/', '$1', 'test hjjjja ppp');

// 处理示例3:here abbbbbc x → here abc x
echo preg_replace('/(?<=[a-z])([a-z])\1+(?=[a-z])/', '$1', 'here abbbbbc x');

正则表达式解释

  • (?<=[a-z]):正向后顾断言,确保当前匹配位置前面是小写字母(排除单词开头的重复字符)
  • ([a-z])\1+:捕获一个小写字母,并匹配其连续重复的后续字符
  • (?=[a-z]):正向前瞻断言,确保当前匹配位置后面是小写字母(排除单词结尾的重复字符)

通过这两个断言,只会替换被其他字母包裹的连续重复字符;像bbb、ppp这类纯重复字符的独立单词,因无法同时满足前后都是字母的条件,会被完整保留。

扩展说明

如果需要支持大小写不敏感场景,给正则添加i修饰符即可:

echo preg_replace('/(?<=[a-z])([a-z])\1+(?=[a-z])/i', '$1', 'Test HJJJJA PPP');
// 输出: Test HJA PPP

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:13:11