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

构建超级非贪婪正则表达式:如何仅匹配目标token提取word2?

解决“超级非贪婪”正则匹配问题

你的问题本质是正则引擎的回溯机制导致非贪婪匹配“过度”延伸了内容,要让它尽早失败并定位到目标匹配,核心思路是严格限制捕获组的内容不能包含结束标记*/,从根源上避免它跨过中间的*/去满足后续模式。

修正后的正则表达式

\/\*\*((?:(?!\*\/).)*)\*\/\w+\d+

为什么原始正则会“跑偏”?

你的原始正则\/\*\*(.*?)\*\/\w+\d+里,.*?的“非贪婪”并不是绝对的——它的匹配逻辑是“尽可能少匹配,但要保证后面的模式能成功匹配”:

  • 引擎先从第一个/**开始尝试,捕获word1后,后面的*/紧跟着asdf ,完全不满足\w+\d+的要求;
  • 这时引擎会触发回溯,让.*?多匹配一些内容(也就是word1*/asdf /**word2),直到后面的*/之后能找到abc123符合\w+\d+的条件,最终就出现了不符合预期的长匹配。

修正正则的核心原理

(?:(?!\*\/).)*是一个负向前瞻断言,它的作用是:“匹配任意单个字符,前提是当前位置不是*/的起始位置”。这就彻底限制了捕获组内的内容不会包含*/,确保每个/**都只会对应最近的那个*/。

当引擎用这个正则匹配时:

  1. 第一个/**捕获word1后,*/后面的asdf 不满足\w+\d+,这次匹配直接失败;
  2. 引擎自动移动到下一个/**的位置,捕获word2后,后面的*/abc123完美符合*/\w+\d+的模式,匹配成功,正好提取到你想要的word2。

另一种等效的简洁写法

如果你的正则引擎支持,也可以用排除型匹配实现相同效果,逻辑更直观:

\/\*\*([^*]*(?:\*(?!\/)[^*]*)*)\*\/\w+\d+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:52:43