如何使用preg_match提取img src

3

我有一个不同格式的html数组,其中[amp;src]=>image,另一个是[posthtml]=>image2,还有一个是[nbsp;image3]。

如何使用常见的preg_match()提取img和文本,以便我们可以从html中获取完美的图像src和文本。如果不能使用preg_match()解决,是否有其他方法来解决它。 如果有人知道,请回复一下。如何解决这个问题。 我需要你的帮助。


你是什么意思 [amp;src]=>image, anotherone [posthtml]=>image2, anothertwo [nbsp;<div_dir]=>image3 - Shiplu Mokaddim
可能是重复的问题:如何使用PHP从HTML中提取img src、title和alt? - Ferdinand Beyer
1个回答

9
推荐的方法是使用DOM
$dom = new DOMDocument;
$dom->loadHTML($HTML);
$images = $dom->getElementsByTagName('img');

foreach($images as $im){
    $attrs = $imgages->attributes();
    $src = $attrs->getNamedItem('src')->nodeValue
}

使用正则表达式:
preg_match_all("/<img .*?(?=src)src=\"([^\"]+)\"/si", $html, $m); 
print_r($m);

谢谢回复。但第一个不起作用。第二个没有返回值。 - Ankan Bhadra
@AnkanBhadra 正则表达式已更新。DOMDocument 现在不再识别 HTML5。 - Shiplu Mokaddim
虽然我很想支持一个观点,认为在解析 HTML 时不应使用正则表达式,但我认为这是一个好的用例,特别是当您无法控制包含目标 HTML 的网站时。网络上有无数个页面包含错误,这些错误会完全阻止 PHP 的 DOMDocument 工作,这是正确的,因为 XML 解析器本来就应该根据设计在错误时失败。 - Michael Butler
@MichaelButler 即使存在错误,DOMDocument 尝试 进行解析。当它尝试时,它会解析大部分内容。通常这已经足够了。 - Shiplu Mokaddim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接