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

如何用正则匹配不含att2的<tag>标签?避免过度捕获

解决XML标签的正则匹配问题

要精准匹配仅包含att1属性的<tag/>标签(Case1),同时排除包含att1和att2的标签(Case2),可以调整负向预查的位置和范围,使用以下正则表达式:

<tag att1="(.*?)"(?!\s+att2=".*?")\s*/>

正则各部分说明:

  • <tag att1="(.*?)":匹配标签开头与att1属性,通过非贪婪模式.*?捕获att1的属性值,避免过度匹配。
  • (?!\s+att2=".*?"):负向预查,确保att1属性结束后,不会紧接着出现带空格的att2属性结构,直接排除Case2的标签。
  • \s*/>:匹配标签结束前可能存在的任意空格,兼容XML格式中允许的空格书写习惯。

为什么之前的正则失效?

你之前的负向预查范围错误,直接检查后续是否是完整的 att2="..."/>,但这种写法会忽略att1与att2之间可能存在的空格差异,或者预查的位置没有覆盖到标签结束前的所有区域,导致过度捕获或漏判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:53:09