急求匹配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>,未正则
展开
 我来答
绯弹亚丝娜
2016-06-28 · TA获得超过1094个赞
知道小有建树答主
回答量:330
采纳率:100%
帮助的人:134万
展开全部
用正则实现比较复杂,如果是.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,多了不要,问号表示懒惰匹配~
追问
必须要用正则,我写已经出来了,但我写的不是很好,虽然能拿到想要的数据,还是谢谢你
追答
好吧~也许你也可以参考一下我的...
然后如果你觉得有帮助的话,能不能采纳一下呢,毕竟打了好久的字呢
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式