【发布时间】:2018-08-20 10:53:13
【问题描述】:
我有一个正则表达式模式,预计会从一些 <img> html 中捕获 src 和 height(可能在 height 或 style 属性中)元素。这是我的模式:
/img[^\>]*(?:height="([\d]+)")?[^\>]*src="([^"]+)"[^\>]*(?:style\="height:([\d]+)px;?[^"]+")?[^\>]*/i
我使用preg_match_all函数搜索以下字符串:
<img alt="" height="200" src="http://www.example.com/example.png" width="1500" style="height:200px;" />
src 没有问题,但它无法捕获 height 子组。我的正则表达式模式错了吗?
【问题讨论】:
-
这称为解析。不要使用正则表达式来解析 HTML 文档。请改用 DOM 解析器。
-
因为
height组后面跟着?,所以它变成了可选的。它前面的[^\>]*子表达式是贪婪的,匹配到src=之前的所有内容。顺便说一句,>不是特殊的正则表达式字符,不需要转义。=也是如此。阅读 PHP PCRE 中的 meta characters 和 repetition,然后去掉regex(如果属性顺序不同,则不匹配)和 use a DOM parser to parse HTML fragments。
标签: php regex preg-match-all