举例:
...
<h1>我是标题</h1>
<p class='myclass'>
<p>这是一行文字</p>
<p>这是一个p</p>
<p>
<p>这是嵌套的一行文字</p>
</p>
</p>
...
如上所示,服务器端返回一段很长的dom结构,需求是把<h1>标签下面最大的那个p拿到,然后解析出其中p标签内的数据,使用preg_match_all()或者preg_match(),正则表达式如何才能匹配到最外层的这个p?
PS:因为页面结构太杂,所以才想到先匹配到h1下面的的p,然后再匹配p中的p
PS:再精简一点,如果p的class是特定的,整个dom结构中只有一个myclass,如果匹配出带有这个class的p
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
如果不是非常在意性能,这个可以像js/jquery的语法一样获取DOM的内容,比如:
DOMDocument
extension=dom.sophpquery 仿jQuery语法
http://code.google.com/p/phpquery/DomCrawler symfony出品
https://symfony.com/doc/current/components/dom_crawler.htmlquerypath
http://querypath.org/simplehtmldom
http://simplehtmldom.sourceforge.net/你提到多重嵌套,想必是:
<p class="xxx">(.*?)</p>不好使的问题,面对这个问题时,一般这么做先找到找到这个<p> 的特征,这个特征可以根据class、或者一些属性可以匹配到,比如:
<p[^<>]*class="xxx">再找到这个</p> 结尾处的特征,光</p> 肯定是不够的,还要往下找,比如找到下一个
<p class="yyy">的特征如果特征比较明显:
开始特征 (.*?) 结尾特征可以捕获中间的内容可以用simple_html_dom.php: