提取图像路径

时间:2016-12-19 20:59:21

标签: php regex

我需要从HTML中提取所有图像,而不仅仅是从<img>标记,而是从任何地方,包括相对路径。我试过这个正则表达式:

([a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif))

..但遇到特殊字符时失败了。例如in this case

如何抓取路径,使其从'(单引号),"(双引号)或/开始,中间没有空格,以图像扩展名结尾jpg|jpeg|png|gif

编辑:我尽可能使用DOM解析器,但我必须在这里使用regex从到处提取路径,包括内联CSS和JS。

2 个答案:

答案 0 :(得分:2)

您可以使用lookbehind

(?<=['"])[^'"\s]*\.(jpg|jpeg|png|gif)

解析任何不包含引号或空格的URL,并以引号开头。

使用lookbehind而不是匹配引号的(次要)优点是,这样,您可以直接使用整个匹配,而不必在后处理中去除引号。由于复杂性原因,所有正则表达式库都不支持Lookbehind,但是,在这种情况下,它并不比替代方案慢。

答案 1 :(得分:1)

这适用于您的测试数据:

['"\/]([^\s'"]+?\.(jpg|jpeg|png|gif))

首先需要单引号,双引号或正斜杠,然后捕获除空格,单引号和双引号之外的所有内容,直到最近的图像扩展名。匹配项存储在您的第一个捕获组中(通常为$1)。

这种解决方案具有不需要外观的优点(或可能是不利的)。