【发布时间】:2013-01-30 18:20:49
【问题描述】:
我正在尝试查找不包含 alt 属性的 img 标记,以便对其进行修复以进行 W3C 验证。
我正在尝试使用否定的环视语法:
preg_match_all('@<img[^>]*?(?!alt=)[^>]*>@', $text, $matches);
不幸的是没有返回任何东西,而img标签肯定没有alt属性。
我认为问题出在否定查找中,但例如我使用了:
preg_match_all('@<img[^>]+?http:\/\/(?!mysite\.com)[^>]*?>@', $text, $matches);
从外部资源中搜索图像,效果很好。
你知道第一个表达式有什么问题吗? 谢谢!
【问题讨论】:
-
不要使用正则表达式解析 HTML。您无法使用正则表达式可靠地解析 HTML。一旦 HTML 与您的期望发生变化,您的代码就会被破坏。有关如何使用 PHP 模块正确解析 HTML 的示例,请参阅 htmlparsing.com/php.html。
-
我永远不会在生产环境中使用 simple_html_dom,因为它存在内存泄漏。这就是为什么我前一段时间拒绝它并现在使用 nokogiri。这真的取决于是否为此使用正则表达式,就我的目的而言,我认为它很合适。
标签: php regex html-parsing preg-match-all regex-negation