<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>
和my preg匹配的语法如下:
preg_match_all('/<ul class="vehicle__gallery cf">.*?<li>.*?<a(.*?)href="(.*?)"(.*?)>(.*?)<'/a>.*?<'/li>.*?<'/ul>/s', $html_image,$posts, PREG_SET_ORDER);
你不用正则表达式来解析HTML。这行不通。
-
<li>
标签不总是有结束标签,<img>
标签也没有。 - 标签可以有n个属性
- 属性值并不总是放在双引号中
使用像simpledomparser这样的html解析器
我甚至不会尝试为它想出一个正则表达式,因为在某些时候它会失败。
如果你给你的img标签一个class之类的,例如:
<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更改而中断,可能会出现在任何一天。
另一种方法是使用javascript (jquery)。
var imgArr = []
$("ul.vehicle__gallery li img").each(function(){
imgArr.push($(this).attr('src'));
})