如何通过正则表达式获得第二个标记

问题描述 投票:1回答:1

我不明白如何进入第二场比赛<sub>aaaa</sub>而不是<sub>eeee</sub>

我的正则表达式:

<item>.*?<sub>(.*?)<\/sub>.*?<value>(.*?)<\/value>.*?<\/item>

内容:

<item> fffffffffffff
<sub>aaaa</sub>
<value>111</value>
</item>

<item>
<sub>eeee</sub> arg34ddddddddddddddd
<atag>ddd</atag>
<sub>aaaa</sub>
<atag>dddg</atag>
<value>222</value>
</item>

我可以一步到位,还是需要多次运行正则表达式?

UPDATE

我想得到这样的结果:

[['aaa',111],['aaa',222]]

可能吗?

regex
1个回答
-1
投票

尝试

<item>[\s\S]*?<sub>(.*?)<\/sub>((?!<sub>)[\s\S])*<\/item>

Demo

这只需要物品之间的最后一个sub

说明:

  • <item>[\s\S]*?<sub>懒洋洋地匹配itemsub tags之间的任何东西
  • <sub>(.*?)<\/sub>匹配sub标签并捕获其内容
  • ((?!<sub>)[\s\S])*<\/item>使用Tempered Greedy Token确保在之前匹配的sub之后,在关闭sub标签之前没有更多的item标签
© www.soinside.com 2019 - 2024. All rights reserved.