所以我需要一个正则表达式,它可以收集来自频道的Cid
,id
和visibility
属性值,其中Cid
由{的多个变量对共享id
{1}}和visibility
。我似乎只能抓住第一场比赛(0136, 10000, 21
),而不是第二场比赛或任何其他比赛,例如(0136, 5000, 21
)。请记住,XML有多个渠道。
<channel Cid="0x0136">
<type>A</type>
<characteristics var1="0.1" var2="V" var3="3">
<custom_range id="10000" visibility="21"></custom_range>
<custom_range id="5000" visibility="21"></custom_range>
</characteristics>
<visibility>0</visibility>
</channel>
我的正则表达式是:
/\bCid?\b="0x([0-9a-fA-F]+)"(?=(?!Cid)(?s).*id="([0-9]+)" visibility="([0-9]+)")/g
答案 0 :(得分:0)
正则表达式匹配某些文本,如果成功,则在最后一次匹配结束时再次尝试。
所以你将有一次你的Cid比赛和id&amp;能见度捕获了几次。问题是你只能访问最后一次捕获(.NET是一个例外)。
也许XPATH允许更强大或更优雅的解决方案,但我从来没有必要接受它。
使用正则表达式,您可以先使用
Cid="(.*?)"(.*?)</channel>
现在Cid在第1组中,您在第2组上应用另一个正则表达式
id="(.*?)".*?visibility="(.*?)"
我在第1组,在第2组中可见。
现在可以使用任何命令式语言编写三元组,在2个循环中使用几行代码。