-2

我对 PHP 非常陌生,并对用 PHP 编写的 CMS 中的某个文件进行了轻微修改。我修改了一个在页面源中获取第一个标签的函数,<img>以从该源中获取一个随机标签。

用于匹配源的正则表达式是:

$regex = '/<' . $tag . '\\b[^>]*>/i';

其中$tag只包含一个字符串img

但是我注意到在源代码中有src属性包含“1px.gif”的图像,我不想匹配这些。

目前我一直从匹配数组中重新选择一个随机元素,直到它不是 1px.gif,但这当然是一个糟糕的解决方案。

我对正则表达式不够好,无法自己执行此操作,但我理解上面的正则表达式搜索<img和一个不是>. 我需要添加“并且不包含'1px.gif'”。

或者,我可以检查匹配数组并删除每个 1px.gif 条目,但我仍然更喜欢正则表达式。

4

1 回答 1

8

而不是一些损坏的解决方案(正则表达式无法解析 HTML),您应该使用 DOMDocument 来获取您需要的数据。这方面的一个例子是:

<?php
$html = '<p>something</p><img src="something"><img src="yay"><img src="1px.gif">';

$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html);

$xpath = new DOMXPath($doc);
$nodes = $xpath->query('//img[not(contains(@src, "1px.gif"))]');

foreach ($nodes as $node) {
    echo $node->getAttribute('src');
}

这将获得所有没有srcof 的图像1px.gif。从那里开始,很容易获得一个随机节点。

演示:http ://codepad.viper-7.com/UdEiM4

于 2013-01-06T17:49:40.443 回答