如何编写一个获取所有img标签的正则表达式,并在其中,获取" src"值,忽略具有给定类的所有imgs标签? 让我们说我想得到所有没有img标签的srcs没有" dontGetMe"分配给它的类(但可能还有其他类)
即
<img src="teste1.jpg" class="blueClass brightClass dontGetMe" />
<img src="teste2.jpg" class="blueClass" />
<img src="teste3.jpg" class="dontGetMe" />
<img src="teste4.jpg" />
在这个例子中,我的正则表达式应该是teste2.jpg和teste4.jpg。
到目前为止我得到的正则表达式如下(无论是否存在&#34; dontGetMe&#34;类,它都会获得所有imgs src值:
((?:\<img).*)(src)
!这个正则表达式将用于PHP脚本,因此它必须在&#34; http://www.phpliveregex.com&#34;上成功运行。
编辑:正则表达式将用于以下php函数: 我完全同意正则表达式似乎不是最明确和最有保证的方法,但是,我缺乏PHP知识,这与我的技术联系在一起。
function Advanced_lazyload($buffer)
{
(...)
$pattern = '(REGEX EXPRESSION GOES HERE)';
$buffer = preg_replace($pattern, "$1 src='temp.gif' ImageHolder", $buffer);
return $buffer;
}
答案 0 :(得分:4)
不要使用正则表达式来解析html。该任务适用于xml解析器。
推荐方式是使用 XPath 。
$doc = new DOMDocument();
$doc->loadHTML($html);
$dox = new DOMXPath($doc);
$elements = $dox->query('//img[not(contains(@class, "dontGetMe"))]/@src');
foreach($elements as $el){
echo $el->nodeValue, "\n";
}