我正在尝试查找不包含img
属性的alt
标记,以便修复它以进行W3C验证。
我正在尝试使用负面的环顾语法:
preg_match_all('@<img[^>]*?(?!alt=)[^>]*>@', $text, $matches);
,遗憾的是,它没有返回任何内容,而img
个标记没有alt
属性。
我认为问题出现在负面查找中,但例如我用过:
preg_match_all('@<img[^>]+?http:\/\/(?!mysite\.com)[^>]*?>@', $text, $matches);
从外部资源中搜索图像并且工作正常。
任何想法第一个表达式有什么问题? 谢谢!
答案 0 :(得分:2)
最后我找到了可行的解决方案:
preg_match_all('@<img(?:(?!alt=).)*?>@', $text, $matches);
感谢您的贡献。
答案 1 :(得分:1)
使用先行语法与第一个语法一起使用
preg_match_all('@<img[^>]*?(?=alt=)[^>]*>@', $text, $matches);
这里的$ matches只包含带有alt&#39的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);
}
?>