2013-05-21 117 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'); 
} 
相關問題