我正在尝试查找不包含alt属性的img标记,以便修复它以进行W3C验证。
我尝试使用负面的环视语法:
preg_match_all('@<img[^>]*?(?!alt=)[^>]*>@', $text, $matches);不幸的是,它没有返回任何东西,而肯定有不带alt属性的img标签。
我认为问题出在负向查找中,但例如我使用:
preg_match_all('@<img[^>]+?http:\/\/(?!mysite\.com)[^>]*?>@', $text, $matches);从外部资源中搜索图像,它工作得很好。
知道第一个表达式有什么问题吗?谢谢!
发布于 2013-02-15 05:09:46
最后,我找到了可行的解决方案:
preg_match_all('@<img(?:(?!alt=).)*?>@', $text, $matches);感谢你的贡献。
发布于 2013-02-15 04:52:15
使用前瞻语法适用于第一个语法
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);
}
?>https://stackoverflow.com/questions/14883459
复制相似问题