You need to enable JavaScript to run this app. PHP正则如何匹配相邻且共享中间字符的两个目标关键词
优惠活动
大模型
产品
解决方案
定价
更多

PHP正则如何匹配相邻且共享中间字符的两个目标关键词

重叠共享字符关键词的正则匹配方案

核心解决思路是使用零宽正向先行断言(正向前瞻),这类断言不会消耗被匹配字符串的字符,因此可以识别出位置重叠、共享字符的多个关键词。

实现代码

<?php
$targetStr = "xxxABCDExxx";
// 正则中把匹配规则放到正向前瞻分组中
preg_match_all('/(?=(ABC|CDE))/', $targetStr, $matchResult);
// 所有命中的关键词存放在$matchResult[1]数组中
print_r($matchResult[1]);

运行上述代码输出结果为:

Array
(
    [0] => ABC
    [1] => CDE
)

原理解释

普通的分组匹配/(ABC|CDE)/在命中ABC后,会将匹配指针移动到字符C的后方,后续匹配只能从D开始,自然无法命中需要以C开头的CDE。
而正向前瞻(?=规则)属于零宽匹配,仅校验当前指针位置后方是否符合规则,不会移动指针位置。检查完ABC后指针还停留在A的前方,后续会逐个字符后移校验,指针移到C的位置时就可以命中CDE的匹配规则。

如果需要匹配的关键词是动态的,只需把所有关键词用|拼接后替换前瞻内的规则即可,无需调整其他逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 20:06:03