1
我使用这个正则表达式匹配所有图像。我如何重写它以最终匹配所有图像而不是</a>
?正则表达式匹配所有没有链接的图像
preg_match_all ("/\<img ([^>]*)\/*\>/i", $text, $dst);
我使用这个正则表达式匹配所有图像。我如何重写它以最终匹配所有图像而不是</a>
?正则表达式匹配所有没有链接的图像
preg_match_all ("/\<img ([^>]*)\/*\>/i", $text, $dst);
我不建议使用正则表达式解析HTML字符串。
然而,你可能想使用DOM首先遍历所有的图片,试图将它们存储在数组中。
foreach ($dom->getElementsByTagName('img') as $img) {
$array[$img->getAttribue('src')]=1;
}
然后循环遍历所有链接,并尝试从您的数组中找到要从中删除的图像。
foreach ($dom->getElementsByTagName('a') as $a) {
//loop to catch multiple IMGs in LINKS
foreach ($a->getElementsByTagName('img') as $img) {
unset($array[$img->getAttribue('src')]);
}
}
你可以使用domDocument而不是正则表达式,这里的语法可能不正确,但它可以给你一个想法。
$dom = new domDocument;
$dom->loadHTML($html);
$dom->preserveWhiteSpace = false;
$images = $dom->getElementsByTagName('img');
$images_array = array();
foreach ($images as $image) {
if ($image->parentNode->nodeName != 'a')
echo $images_array = $image->getAttribute('src');
}
你可能不应该使用正则表达式来解析HTML,在PHP中有HTML解析器。 – Qtax
你的意思是你想找到所有没有'a'作为父母的'img'?你有一些示例输入HTML吗? –
是的,这正是我所想的 – Dikobraz