如何刮取每个li标签的img src值

时间:2014-08-22 04:50:49

标签: php regex

<ul class="vehicle__gallery cf">
<li><a href="#"><img src="AETV19098412_2a.jpg"></a></li>
<li><a href="#"><img src="AETV19098412_3a.jpg"></a></li>
<li><a href="#"><img src="AETV19098412_4a.jpg"></a></li>
</ul>

和我的preg匹配语法如下:

preg_match_all('/<ul class="vehicle__gallery cf">.*?<li>.*?<a(.*?)href="(.*?)"(.*?)>(.*?)<\/a>.*?<\/li>.*?<\/ul>/s', $html_image,$posts, PREG_SET_ORDER);

4 个答案:

答案 0 :(得分:1)

don't使用正则表达式来解析HTML。 PHP有一个很好的DOM实现,您可以使用loadHTML()query() XPath表达式//ul/li/a/img/@src来检索您所追求的内容,或者可能import如果您更喜欢该工具集,则SimpleXML为{{3}}对象。

实施例

$html = <<<HTML
<ul class="vehicle__gallery cf">
<li><a href="#"><img src="AETV19098412_2a.jpg"></a></li>
<li><a href="#"><img src="AETV19098412_3a.jpg"></a></li>
<li><a href="#"><img src="AETV19098412_4a.jpg"></a></li>
</ul>
HTML;

$dom = new DOMDocument();
$dom->loadHTML($html);

$xpath = new DOMXpath($dom);
$imgs = $xpath->query("//ul/li/a/img/@src");

foreach ($imgs as $img) {
    echo $img->nodeValue . "\n";
}

输出:

AETV19098412_2a.jpg
AETV19098412_3a.jpg
AETV19098412_4a.jpg

答案 1 :(得分:0)

你不使用正则表达式解析HTML。它不会工作。

  • <li>标记不总是有结束标记,也不是<img>标记。
  • 标签可以有n个属性
  • 属性值不要总是用双引号

使用像simpledomparser

这样的html解析器

我甚至不会尝试为此设置一个正则表达式,因为在某些时候它会失败。

答案 2 :(得分:-1)

如果你给你的img标签一个类或什么,例如:

<img class="gallery_item" src="AETV19098412_2a.jpg">
<img class="gallery_item" src="AETV19098412_3a.jpg">

你可以做得更轻松:

preg_match('/<img class="gallery_item" src="(.*)">/');

然而,这仍然非常hacky,如果您添加了css类,html属性或修改代码,则会遇到代码可能无法再运行的问题。

这个解决方案是其他任何东西然后干净你应该考虑使用JQuery或我之前的评论中所述的表单将使你的生活更轻松,代码将不会因为未来可能出现的轻微html更改而破坏

答案 3 :(得分:-1)

另一种方法是使用javascript(jquery)。

var imgArr = []
$("ul.vehicle__gallery li img").each(function(){
     imgArr.push($(this).attr('src'));
})