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 回答