<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);
答案 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>
标记。 我甚至不会尝试为此设置一个正则表达式,因为在某些时候它会失败。
答案 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'));
})