首页 新闻 会员 周边

正则表达式 html匹配

0
悬赏园豆:200 [已解决问题] 解决于 2014-12-01 21:43

有这样一段html标签

<p style="">aaa<p>bbb</p>ccc<p>ddd</p>eee</p>

<p>ffff</p>

我想最终得到的是第一行中从红色p标签开始到红色p标签结束,其中可能还包括多个成对出现的p标签例如蓝色和绿色部分的,但不包括下一行的p标签,

应该怎样写呢?

我这样写:<p.*?(<p>.*?</p>)?.*?</p>,最终得到的是<p style="">aaa<p>bbb</p>

求各位同行老师不吝赐教

agoodchild的主页 agoodchild | 初学一级 | 园豆:4
提问于:2014-11-28 23:31
< >
分享
最佳答案
0

<p[^<]*>.*?(.*?(((?'kh'<p[^<]*>).*?)+((?'-kh'</p>).*?)+)*(?(kh)(?!)))</p>

收获园豆:200
Yu | 专家六级 |园豆:12980 | 2014-11-29 08:40

这个是对的,多谢

我有个不明白的地方希望您能指教一下,

(?'-kh'</p>)这个是什么意思?

agoodchild | 园豆:4 (初学一级) | 2014-11-30 12:58

@agoodchild:

意思是每碰到一个</p> 就弹出一个<p[^<]*>,保持成对出现,

'kh'代表着被捕获的<p[^<]*>内容

Yu | 园豆:12980 (专家六级) | 2014-11-30 15:25

@Yu: 谢谢!

agoodchild | 园豆:4 (初学一级) | 2014-12-01 21:42
其他回答(5)
0

哥们,用<p[^<]*((<p[^<]*</p>)[^<]*)*?</p>就可以匹配到你想要的。

不信下面代码你放到一个html文件里运行一下。

<html>
<body onload="show();">
<script>
function show() {
var str = '<p style="">aaa<p>bbb</p>ccc<p>ddd</p>eee</p><p>ffff</p>';
var regStart = /<p[^<]*((<p[^<]*<\/p>)[^<]*)*?<\/p>/;
var start = regStart.exec(str)[0];
alert(start);
}
</script>
</body>
</html>

要给分哦

Slark.NET | 园豆:692 (小虾三级) | 2014-11-29 08:52

多谢你哥们,但是这个语句有个问题就是再多加一层嵌套的话结果就不对了,

支持(0) 反对(0) agoodchild | 园豆:4 (初学一级) | 2014-11-30 13:00
0

<p style="">aaa<p>bbb</p>ccc<p>ddd</p>eee</p>

ThreeTree | 园豆:1490 (小虾三级) | 2014-11-29 10:11
0

.*? 是贪心算法 是取最大的那个

你看看这篇文章

http://baae176176.blog.163.com/blog/static/48659834201062392726114/

小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2014-11-29 10:37

谢谢

支持(0) 反对(0) agoodchild | 园豆:4 (初学一级) | 2014-11-30 13:01
0

推荐:

贪心算法

Mr.Brian | 园豆:1518 (小虾三级) | 2014-11-29 10:52

谢谢

支持(0) 反对(0) agoodchild | 园豆:4 (初学一级) | 2014-11-30 13:01
0

<p style="">[\S]*</p>

只会造轮子 | 园豆:2274 (老鸟四级) | 2014-11-29 11:59

谢谢

支持(0) 反对(0) agoodchild | 园豆:4 (初学一级) | 2014-11-30 13:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册