2

文字列内で img タグを見つける方法は知っていますが、拡張子が gif の img タグを除外する必要があります。preg_match でネガティブを使用するにはどうすればよいですか? .gif 拡張子を含まない最初のイメージ タグのみが必要です。

私は現在これを持っています:

  $text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
  $pattern = "/<img[^>]+\>/i";
  preg_match($pattern, $text, $matches);
  $text = $matches[0];

$text は最初のタグを提供します。たとえば<img src="something.gif" border="0" /> 、.gif は受け入れたくないので、最初のタグが gif の場合、それをスキップして other の検索を続けます。

コードを変更する方法を教えてください。

本当にありがとう!

4

3 に答える 3

3

そのようにしないでください。正規表現を使用して HTML を解析しようとすると、失敗する運命にあるタスクです。HTML の複雑さや要件がわずかに増加すると、正規表現が信じられないほど複雑になるからです。

最良の方法は、タスク用に設計されたツールであるDOMDocumentクラスを使用することです。

$dom = new DOMDocument;
$dom->loadHTML($text);

$images = $dom->getElementsByTagName('img');
foreach ($images as $image) {
    if (!substr($image->getAttribute('src'), -4) === '.gif') {
        break;
    }
}

// $image is now the first image that didn't end with .gif
于 2013-02-18T08:58:12.470 に答える
1

これを試して :

<?php
$text = '<img src="something.jpg" ';

preg_match('/src="(?P<image>.*\.(jpeg|png|jpg))"/', $text, $matches);

echo $matches['image'];
?>
于 2013-02-18T09:06:49.813 に答える
1

それでも正規表現を使用したい場合は、パターンを次のように変更してみてください。

<?php
$text = '<img src="something.jpg" ';
$pattern = '/<img\s+src="(([^"]+)(.)(jpeg|png|jpg))"/';
preg_match_all($pattern, $text, $out);

echo '<pre>';
print_r($out);
?>
于 2013-02-18T09:04:03.887 に答える