Php 如何刮取每个li标签的img src值
我的preg match语法如下所示:Php 如何刮取每个li标签的img src值,php,regex,Php,Regex,我的preg match语法如下所示: <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 h
<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\u match\u all('/.*?(.*?.*?*?*?/s',$html\u image,$posts,preg\u SET\u ORDER);
您不需要使用正则表达式来解析HTML。它不起作用
标记不总是有结束标记,也不总是有结束标记- 一个标记可以有n个属性
- 属性值并不总是用双引号引起来
我甚至不会为这个问题想出一个正则表达式,因为在某些情况下它会失败。如果你给你的img标签一个类或什么,例如:
preg_match_all('/<ul class="vehicle__gallery cf">.*?<li>.*?<a(.*?)href="(.*?)"(.*?)>(.*?)<\/a>.*?<\/li>.*?<\/ul>/s', $html_image,$posts, PREG_SET_ORDER);
您可以做得更简单:
<img class="gallery_item" src="AETV19098412_2a.jpg">
<img class="gallery_item" src="AETV19098412_3a.jpg">
preg_匹配('/');
然而,这仍然是非常骇客,如果你曾经添加css类,html属性或修改你的代码,你的代码可能不再工作的问题
这个解决方案是干净的,您应该考虑使用JQuery或我之前评论中所述的表单,这将使您的生活更加轻松,并且代码不会因为将来可能出现的html微小更改而中断。另一种方法是使用javascript(JQuery) 请使用正则表达式来解析HTML。PHP有一个很好的实现,您可以使用它和诸如
//ul/li/a/img/@src
之类的表达式来检索所需内容,或者如果您喜欢该工具集,也可以将其作为对象
例子:
您是否能够使用JavaScript或更好的JQuery?然后,提取所需的数据并通过Ajax传递是一种更简单、更干净的方法,因为这可以工作,但如果您在以后只添加一个参数,或者在html属性之间偶然添加一个空格,则此代码将不再工作。这是一个非常棘手的解决方案。否则,您不能使用表单将图像数据传递给脚本吗?您好,
*
应该是*?
。尽管有很多情况下正则表达式会失败,但我担心..我说过这是非常危险的,我只是提供了一个基于PHP的解决方案,因为作者要求它。和(*)是正确的,只要没有多余的空格或任何其他属性干扰,它就可以工作。这可以正常工作,但如果OP可以使用jquery,我们需要与他联系。他在使用php(P.s.我没有投反对票)是的,我只是根据我通常的想法给出我的解决方案。。不管怎样,如果他被投下,我将删除我的答案。@Anirudha您的答案使用类似SimpleDomainParser的html解析器将是一个注释,而不是答案。提供如何使用dom解析器获取标记内的值的解决方案。@AvinashRaj OP要求一个正则表达式解决方案,其ans为“否”。就解决方案而言,如果他在使用图书馆时遇到任何问题,就让他提出一个新问题。这将是另一个问题,老实说,我不知道PHP你能详细说明你的答案吗?@AvinashRaj,这将是另一个问题,正如我所说。让OP尝试使用图书馆。@Anirudha,我不认为这是另一个问题。他问我如何解析这个html文件并获取特定标记的值。您的答案只是让他使用dom解析器。您需要指导他如何使用dom解析器来实现这一点。一个链接(如果它是SO链接的话就很好)提到这一点(如何使用dom解析器解析特定标记内的文本)会更好。
preg_match('/<img class="gallery_item" src="(.*)">/');
var imgArr = []
$("ul.vehicle__gallery li img").each(function(){
imgArr.push($(this).attr('src'));
})
$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