如何获取HTML的嵌套闭合标签 假设有这样一个HTML:<div class='test'><p>测试文字1</p><div><span>测试文字2</span></div>测试文字3<br /><br />测试文字4</div>例如我要获取到<div class='test'>和它对应的闭合标签</div>中间的所有内容,如何做?谢谢!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以考虑jQuery,<script type="text/javascript">jQuery(function(){var res = $(".test").html();return res;});</script> 好办法啊,可惜我要的是PHP上能处理的方法。 不太明白你的意思,是不是要用PHP处理获取的结果?如果这样的话,可以使用定界符 $html = <<<EOT<div class='test'><p>测试文字1</p><div><span>测试文字2</span></div>测试文字3<br /><br />测试文字4</div>EOT;$dom = new DOMDocument();$dom->loadHTML($html);$xpath = new DOMXPath($dom);$tags = $xpath->query('//div[@class="test"]');foreach($tags as $tag)echo $tag->nodeValue;你的HTML不完整,<div 只有一个 </div>有3个,不符合w3c标准。 本帖最后由 xuzuning 于 2013-05-12 19:28:27 编辑 phpQuery 可以在网上下载phpQuery 遵循 jquery 语法,除了 js 的事件处理外,就是一个 php 版的 jquery会用jquery 就会用 phpQuery唯一的缺点就是体积稍稍大了点 哈哈,那个回答是 littlebo01 回复的,我是提问者!!原来PHP也可以使用JQ,长见识了!!方法真好!!我等下试试在网上找到一种 方法是用正则的,类似这个<(?<HtmlTag>[\w]+)[^>]*\s[iI][dD]=(?<Quote>["']?)footer(?(Quote)\k<Quote>)[^>]*?(/>|>((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|.*?)*</\k<HtmlTag>>)但真心看不懂呀!!思想就是先匹配最前面的起始标签,假设是div吧(<div),接着一旦遇到嵌套div,就“压入堆栈”,后面如果遇到div闭合标签了,就“弹出堆栈”。如果遇到闭合标签的时候,堆栈里面已经没有东西了,那么匹配结束,此结束标签为正确的闭合标签不用正则,要是也能按这种思维写出来效果就好了。 就是使用PHP来获取这段数据,上面有人介绍了PHP的JQ,呵呵。。不过希望有其它方法 php如何实现公司结构图(树形结构) php和mysql的模糊查询问题,大虾,救命啊! 变量可以调用变量? 求助跨浏览器问题? dreamweaver 和 mysql 连接找不到文件的疑惑... 请问,数据表中有33个字段会不会影响效率呀? 关于php接连mysql的问题 PHP,ASP,JSP哪个好? 在php里,上传超过服务器配置的附件最大值时,如何才能得到附件的大小? 网络编程该学什么? 请问下php如何快速判断大量远程文件是否存在 关于通过浏览器 调用socket后台超时问题
jQuery(function(){
var res = $(".test").html();
return res;
});
</script>
好办法啊,可惜我要的是PHP上能处理的方法。
如果这样的话,可以使用定界符
<div class='test'>
<p>测试文字1</p>
<div>
<span>测试文字2</span>
</div>
测试文字3
<br />
<br />
测试文字4
</div>
EOT;
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$tags = $xpath->query('//div[@class="test"]');
foreach($tags as $tag)
echo $tag->nodeValue;你的HTML不完整,<div 只有一个 </div>有3个,不符合w3c标准。
phpQuery 遵循 jquery 语法,除了 js 的事件处理外,就是一个 php 版的 jquery
会用jquery 就会用 phpQuery
唯一的缺点就是体积稍稍大了点
哈哈,那个回答是 littlebo01 回复的,我是提问者!!
原来PHP也可以使用JQ,长见识了!!方法真好!!我等下试试
在网上找到一种 方法是用正则的,类似这个
<(?<HtmlTag>[\w]+)[^>]*\s[iI][dD]=(?<Quote>["']?)footer(?(Quote)\k<Quote>)[^>]*?(/>|>((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|.*?)*</\k<HtmlTag>>)
但真心看不懂呀!!
思想就是先匹配最前面的起始标签,假设是div吧(<div),接着一旦遇到嵌套div,就“压入堆栈”,后面如果遇到div闭合标签了,就“弹出堆栈”。如果遇到闭合标签的时候,堆栈里面已经没有东西了,那么匹配结束,此结束标签为正确的闭合标签不用正则,要是也能按这种思维写出来效果就好了。
就是使用PHP来获取这段数据,上面有人介绍了PHP的JQ,呵呵。。
不过希望有其它方法