0

img属性を含まないタグを見つけようとしているaltので、W3C検証用に修正します。

ネガティブルックアラウンド構文を使用しようとしています:

preg_match_all('@<img[^>]*?(?!alt=)[^>]*>@', $text, $matches);

残念ながら、これは何も返しませんが、確かに属性のimgないタグがあります。alt

問題はネガティブルックアップにあると思いましたが、たとえば次のように使用しました。

preg_match_all('@<img[^>]+?http:\/\/(?!mysite\.com)[^>]*?>@', $text, $matches);

外部リソースから画像を検索すると、正常に機能しました。

最初の式の何が問題になっていますか?ありがとう!

4

2 に答える 2

2

最後に、実用的な解決策を見つけました:

preg_match_all('@<img(?:(?!alt=).)*?>@', $text, $matches);

貢献していただきありがとうございます。

于 2013-02-14T21:09:45.640 に答える
1

先読み構文を使用すると、最初の構文で機能します

preg_match_all('@<img[^>]*?(?=alt=)[^>]*>@', $text, $matches);

ここの $matches には、alt を含む img のみが含まれます。

<?php
$str = <<<EOF
<html>
  <body>
    hello
    <img src="withalt" alt="hi"/>asdf
    <img src="noalt" />
    <img src="withalt2" alt="blah" />
  </body>
</html>
EOF;

if (preg_match_all('@<img[^>]*?(?=alt=)[^>]*>@', $str, $matches)) {
   echo "matches\n";
   print_r($matches);
}

?>
于 2013-02-14T20:52:14.900 に答える