如下HTML代码
<div class="bd class">
<div class="ul class">
<ul>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
</ul>
</div>
<div class="ul1 class">
<ul>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
</ul>
</div>
</div>
如何匹配到所有文字,因为div有多个,如何才能正确的匹配到最后一个
谢谢
<div class="bd class">
<div class="ul class">
<ul>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
</ul>
</div>
<div class="ul1 class">
<ul>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
</ul>
</div>
</div>
如何匹配到所有文字,因为div有多个,如何才能正确的匹配到最后一个
谢谢
不过你要送分我也不介意,呵呵preg_match_all("/<li>(.*)</li>/isU", $html, $array);
print_r($array);看结果就知道如果你所说的“最后一个”指的是div,那就有点难度,需要先分割再正则,或者DOM-XPath类
我要的不是这种效果,我需要的是:<div class="bd class">.*</div>里面的内容,因为有多个DIV,他到第一个DIV就匹配成功了,我现在需要让他直接匹配到最后一个。
<div class="bd class">
<div class="ul class">
<ul>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
</ul>
</div>
<div class="ul1 class">
<ul>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
</ul>
</div>
</div>
eof;
if(preg_match('/<div\s+class="bd\s+class">(.*)<\/div>/is',$s,$arr)){
print_r($arr);
}
另外PHP正则里面有子匹配吗?
最后你能否告诉我一下你的QQ,我想拜你为师
楼上的这个,如果<div></div>外面还有内容的话,这个是没有办法匹配的
$s =<<<eof
<div>我不能匹配</div>
<div class="bd class">
<div class="ul class">
<ul>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
</ul>
</div>
<div class="ul1 class">
<ul>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
<li>文字</li>
</ul>
</div>
</div>
<div>我不能匹配</div>
eof;
if(preg_match('#<div\s+class="bd\s+class">((?:\s*<div[^>]*>(?>\s*<(?!/?div[^>]*>)[^>]+>[^<]*)+</div>\s*)+)</div>#is',$s,$arr)){
print_r($arr);
}?>
关于这个正则的讲解// 块的开始定义
<div\s+class="bd\s+class"> // 内容匹配开始
(
// 多个不匹配内容开始(子div块)
(?>
起始可能存在的空白字符
\s*
// 子div块开始
<div[^>]*>
// 多个内容开始(格式为:"非div|/div的标签+后续内容",这个格式需要考虑内容先出现还是标签先出现)
(?>
// 可能存在的空白字符
\s*
// 标签开头
<
// 和上面的<构成环视,“<“后面不能是”div>“|”/div>“
(?!/?div[^>]*>)
// 任意标签
[^>]+
// 标签结尾
>
// 非下一个标签的内容
[^<]*
// 多个内容结束
)+
// 子div块结束
</div>
结尾可能存在的空白字符
\s*
// 多个不匹配内容结束
)+
// 内容匹配结束
)// 块的结尾定义
</div>
像你所说的多个div,就是只有共性,没有特性(正则不能计算,无法把"最后一个"作为特性);
这就需要二次处理,第一次把"div"作为特性,把所有div选出来,然后通过其他方式把“最后一个”这个特性选出来xpath有简单计算函数,就能把共性“div”和特性“最后一个”同时找出来