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

为何仅匹配到最后一个匹配项?<span>标签间多组内容匹配咨询

为什么匹配标签内容只拿到最后一个结果?

这是正则表达式里贪婪匹配在搞鬼!绝大多数情况下,你应该是用了类似 <span>(.*)</span> 这样的正则对吧?

问题根源:贪婪匹配的特性

正则里的 .* 属于贪婪量词,它会尽可能多地匹配字符——意思是从字符串里第一个 <span> 开始,它会一直往后找,直到找到最后一个 </span> 才停下。这样就把两个<span>之间的所有内容(包括中间的标签和文本)都当成了一个匹配项,自然就只拿到最后那组内容了。

举个例子,假设你的字符串是:

<span>第一组内容</span> 这里是其他文本 <span>第二组内容</span>

用贪婪正则 <span>(.*)</span> 匹配的话,捕获到的内容会是:

第一组内容</span> 这里是其他文本 <span>第二组内容

而不是你想要的 第一组内容 和 第二组内容 两个结果。

解决办法:切换到非贪婪模式

把贪婪量词 .* 改成非贪婪量词 .*?,也就是正则写成:

<span>(.*?)</span>

.*? 会尽可能少地匹配字符,遇到第一个 </span> 就停止匹配,这样就能分别捕获到每个<span>标签里的内容了。

另外还要注意,如果你用的是特定编程语言(比如Python、JavaScript),记得开启全局匹配模式:

  • Python 里用 re.findall(r'<span>(.*?)</span>', your_string) 直接就能得到所有匹配的列表
  • JavaScript 里用 your_string.match(/<span>(.*?)<\/span>/g)(注意转义斜杠),或者用exec循环获取所有结果

最后提醒一句:如果是处理HTML/XML,其实更推荐用专门的解析库(比如Python的BeautifulSoup,JavaScript的Cheerio),正则处理复杂HTML容易出各种问题,但简单场景下非贪婪模式完全够用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:28:08