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

srcこれにより、 ofを持たないすべての画像が取得されます1px.gif。そこから、ランダムなノードを取得するのは非常に簡単です。

デモ: http://codepad.viper-7.com/UdEiM4

于 2013-01-06T17:49:40.443 に答える