您的困难背后的大部分原因仅仅是 HTML 不是一种常规语言,请参阅:Coding Horror: Parsing Html the Cthulhu Way
考虑使用足够强大的查询表达式语言来处理 (X)HTML,或者仅使用 DOM 以编程方式获取所有图像标签,然后排除具有<a>
祖先的标签。
在 PHP5 中,我相信你可以使用DOMXPath
,使用它变得如此简单:
$generated_string = '<a href="index.html"><img src="images/inside_a.jpg" /></a>' .
'<div><img src="images/inside_div.jpg" /></div>' .
'<img src="images/inside_nothing.jpg" />';
$doc = new DOMDocument();
$doc->loadHTML($generated_string);
$xpath = new DOMXpath($doc);
$elements = $xpath->query("//*[not(self::a)]/img");
foreach ($elements as $element){
echo $doc->saveXML($element) . "\n";
}
此代码将给出输出:
<img src="images/inside_div.jpg"/>
<img src="images/inside_nothing.jpg"/>