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

时间:2018-03-03 22:04:29

标签: regex

我不明白如何进入第二场比赛<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>

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

更新

我想得到这样的结果:

  

[['aaaa',111],['aaaa',222]]

有可能吗?

1 个答案:

答案 0 :(得分:-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个标记