php regex表达式获取img srcs异常

时间:2014-06-26 17:24:39

标签: php regex html-parsing

如何编写一个获取所有img标签的正则表达式,并在其中,获取" src"值,忽略具有给定类的所有imgs标签? 让我们说我想得到所有没有img标签的srcs没有" dontGetMe&​​#34;分配给它的类(但可能还有其他类)

<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;
}

1 个答案:

答案 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";
}