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

求匹配模式A且不与模式B重叠的通用PCRE正则表达式

通用解决方案

将原表达式中的<...>替换为以下正则代码,即可实现匹配模式A且不与模式B重叠的需求:

(*SKIP)(?&B)(*FAIL)|(?&A)(?<!\K(?&B))|(?<!(?&B)\K)(?&A)

核心逻辑

  • (*SKIP)(?&B)(*FAIL):先直接排除所有匹配B的文本片段,这些区域不会参与A的匹配。
  • (?&A)(?<!\K(?&B)):匹配A后,反向检查A的结尾是否与B的开头重叠,确保两者没有交叉。
  • (?<!(?&B)\K)(?&A):匹配A前,检查A的开头是否与B的结尾重叠,彻底避免边界交叉。

特殊场景优化

  • 如果模式B是固定长度(比如长度为3),可以简化为更高效的写法:
    (*SKIP)(?&B)(*FAIL)|(?&A)(?<!.{0,2}(?&B))|(?<!(?&B).{0,2})(?&A)
    
  • 如果要求A的内部也完全不包含B的子串,可以在匹配A前增加正向否定环视:
    (*SKIP)(?&B)(*FAIL)|(?!(?&B))(?&A)(?<!(?&B))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:21:49