1

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

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

2 回答 2

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')]);
    }
}
于 2013-05-21T20:55:30.263 回答
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');
}
于 2013-05-21T20:56:43.093 回答