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

Perl5兼容正则实现指定词开头匹配及单独匹配取后续段方法

PCRE兼容正则实现@@分隔文本的开头匹配逻辑

规则梳理

匹配逻辑需同时覆盖两类场景:

  • 普通场景:从指定起始词位置正向查找,截取从起始词开始到下一个@@分隔符之间的全部内容
  • 特殊场景:如果两个@@之间的内容仅为指定起始词本身(前后允许存在空白字符),则跳过该段,直接读取该段之后紧邻的下一个@@分隔段内的全部内容

本次指定起始词为bank representative,测试文本为@@分隔的多段文本块,预期返回2项匹配结果:

  1. 首个以该起始词开头的@@分隔段内的完整文本
  2. 仅包含该起始词的分隔段之后的文本块:Other functions may include ordering checks

原有方案缺陷

初步编写的正则@@\s*+bank representative\b.*?(?=@@)仅能覆盖普通场景的开头匹配,未对「整段仅为起始词」的特殊场景做分支判断,无法自动跳段取后续内容。

可用正则实现

符合Perl 5兼容规范的正则如下:

@@\s*\K(?:bank representative\b(?!\s*(?:@@|$)).*?|bank representative\s*(?=@@|$)\s*@@\s*\K.*?)(?=@@|$)

逻辑拆解

  • @@\s*\K:匹配段起始的@@分隔符及后续空白,通过\K重置匹配起始位置,避免分隔符本身被纳入匹配结果
  • 第一匹配分支(普通场景):bank representative\b(?!\s*(?:@@|$)).*?
    匹配到起始词后,通过负向预查判断当前段并非仅包含起始词(即起始词后不是直接跟空白+分隔符/文本结尾),直接匹配当前段到下一个@@前的所有内容
  • 第二匹配分支(特殊场景):bank representative\s*(?=@@|$)\s*@@\s*\K.*?
    匹配到起始词后,通过正向预查确认当前段仅包含起始词(即起始词后只有空白,直接衔接分隔符/文本结尾),随后跳过当前段结尾的@@和下一段开头的空白,再次通过\K重置匹配起点,匹配下一段到下一个@@前的全部内容
  • 结尾边界(?=@@|$):确保匹配在遇到下一个分隔符或文本末尾时停止,不会出现跨段越界的问题

匹配效果

该正则在测试文本中可准确返回2个预期结果,无多余匹配、无漏匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:36:23