正则表达式匹配没有链接的所有图像

时间:2013-05-21 20:15:50

标签: php regex preg-match-all

我使用此正则表达式来匹配所有图像。我如何重写它以匹配最终没有</a>的所有图像?

preg_match_all ("/\<img ([^>]*)\/*\>/i", $text, $dst);  

2 个答案:

答案 0 :(得分:1)

肥皂盒

我不建议使用正则表达式来解析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')]);
    }
}

答案 1 :(得分:1)

你可以使用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');
}