急求匹配HTML中指定内容的正则表达式
在下面代码中匹配<ulid="list"class="lsits">...</ul>这个ul中的所有内容...<ulid="list"class="lsits"><li>...
在下面代码中匹配<ul id="list" class="lsits">...</ul>这个ul中的所有内容
...
<ul id="list" class="lsits">
<li>...........</li>
<li><ul><li>...</li><li>...</li></ul></li>
<li>...........</li>
</ul>
<ul>
<li>......</li>
</ul>
...
注:页面中有多个ul标签对,我只要其中一对,而我想要的那一对ul中也有<ul></ul>,未正则 展开
...
<ul id="list" class="lsits">
<li>...........</li>
<li><ul><li>...</li><li>...</li></ul></li>
<li>...........</li>
</ul>
<ul>
<li>......</li>
</ul>
...
注:页面中有多个ul标签对,我只要其中一对,而我想要的那一对ul中也有<ul></ul>,未正则 展开
1个回答
展开全部
用正则实现比较复杂,如果是.net平台的话,可以用平衡组完美实现。
<ul\s+id="list"\s+class="lsits">((((?!<ul\b|</ul>)[\s\S])*(?<open><ul\b[^>]*>))+(((?!<ul\b|</ul>)[\s\S])*(?<-open></ul>))+)*(?(open)(?!))((?!<ul\b|</ul>)[\s\S])*</ul>
解释:
<ul\s+id=""list""\s+class=""lsits""> #匹配开头的ul
((((?!<ul\b|</ul>)[\s\S])* #匹配<ul>和</ul>之间的字符
(?<open><ul\b[^>]*>))+ #匹配到<ul则进栈
(((?!<ul\b|</ul>)[\s\S])* #匹配<ul>和</ul>之间的字符
(?<-open></ul>))+ #匹配到</ul则出栈
)* #匹配可以重复N次
(?(open)(?!)) #判断如果栈不为空,<ul>和</ul>数量不匹配则匹配失败
((?!<ul\b|</ul>)[\s\S])*</ul> #匹配结尾的字符以及</ul>
这个正则式可以正确配对<ul>的,缺点是必须在C#.net VB.net等.net平台上运行。
如果不用.net,那么没有完美的方法。
但是如果你能确定<ul id="list" class="lsits">和</ul>之间有几对嵌套的<ul>
或者如果没有多重嵌套的正则的话,也可以有相应的严格正则。
我先就你上面的文本举个例子:
<ul\s+id="list"\s+class="lsits">[\s\S]*?<ul\b[^>]*>[\s\S]*?</ul>[\s\S]*?</ul>
解释:
<ul\s+id="list"\s+class="lsits">
[\s\S]*?<ul\b[^>]*>
[\s\S]*?</ul>
[\s\S]*?</ul>
因为你上面的文本里只嵌套了一个<ul>,所以我就只匹配这个ul,多了不要,问号表示懒惰匹配~
<ul\s+id="list"\s+class="lsits">((((?!<ul\b|</ul>)[\s\S])*(?<open><ul\b[^>]*>))+(((?!<ul\b|</ul>)[\s\S])*(?<-open></ul>))+)*(?(open)(?!))((?!<ul\b|</ul>)[\s\S])*</ul>
解释:
<ul\s+id=""list""\s+class=""lsits""> #匹配开头的ul
((((?!<ul\b|</ul>)[\s\S])* #匹配<ul>和</ul>之间的字符
(?<open><ul\b[^>]*>))+ #匹配到<ul则进栈
(((?!<ul\b|</ul>)[\s\S])* #匹配<ul>和</ul>之间的字符
(?<-open></ul>))+ #匹配到</ul则出栈
)* #匹配可以重复N次
(?(open)(?!)) #判断如果栈不为空,<ul>和</ul>数量不匹配则匹配失败
((?!<ul\b|</ul>)[\s\S])*</ul> #匹配结尾的字符以及</ul>
这个正则式可以正确配对<ul>的,缺点是必须在C#.net VB.net等.net平台上运行。
如果不用.net,那么没有完美的方法。
但是如果你能确定<ul id="list" class="lsits">和</ul>之间有几对嵌套的<ul>
或者如果没有多重嵌套的正则的话,也可以有相应的严格正则。
我先就你上面的文本举个例子:
<ul\s+id="list"\s+class="lsits">[\s\S]*?<ul\b[^>]*>[\s\S]*?</ul>[\s\S]*?</ul>
解释:
<ul\s+id="list"\s+class="lsits">
[\s\S]*?<ul\b[^>]*>
[\s\S]*?</ul>
[\s\S]*?</ul>
因为你上面的文本里只嵌套了一个<ul>,所以我就只匹配这个ul,多了不要,问号表示懒惰匹配~
追问
必须要用正则,我写已经出来了,但我写的不是很好,虽然能拿到想要的数据,还是谢谢你
追答
好吧~也许你也可以参考一下我的...
然后如果你觉得有帮助的话,能不能采纳一下呢,毕竟打了好久的字呢
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询