2013-05-21 66 views
1

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

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

你可能不应该使用正则表达式来解析HTML,在PHP中有HTML解析器。 – Qtax

+1

你的意思是你想找到所有没有'a'作为父母的'img'?你有一些示例输入HTML吗? –

+0

是的,这正是我所想的 – Dikobraz

回答

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

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