Php 提取图像路径

Php 提取图像路径,php,regex,Php,Regex,我需要从HTML中提取所有图像,不仅仅是从标记中提取,还需要从任何地方提取,包括相对路径。我试过这个正则表达式: ([a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif)) 。。但它在遇到特殊字符时失败。比如说 如何获取路径,使其从”(单引号)、”(双引号)或/,中间没有空格,并以图像扩展名jpg | jpeg | png | gif结尾 编辑:我尽可能使用DOM解析器,但我必须在这里使用regex从几乎所有地方提取路径,包括内联CSS和JS。这对测试数据有效: ['"\

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

([a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png|gif))
。。但它在遇到特殊字符时失败。比如说

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


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

这对测试数据有效:

['"\/]([^\s'"]+?\.(jpg|jpeg|png|gif))
它首先需要单引号、双引号或正斜杠,然后捕获除空格、单引号和双引号以外的所有内容,直到最近的图像扩展名。匹配项存储在第一个捕获组中(通常为
$1

此解决方案的优点(或缺点)是不需要lookbehind。

您可以使用:


(?您不应该使用正则表达式解析HTML。请改用。您可以利用lookback并尝试类似于
(?@JayBlanchard-虽然对于正则表达式的解析有很大的仇恨(挖掘也是解析),它在源代码为以下任意内容的情况下使用:格式错误的html,不是html,是未知结构中的html,其中指定元素的XPath未知,您希望在页面完全加载后通过随机计时器执行所有JQuery/etc后提取数据。@3zzy-我会投票重新打开,但这甚至不是一个选项对我来说:S。我知道你想要的帮助是调整你的正则表达式模式,但最近几年,正则表达式似乎已经成为语法分析中的一个诅咒词,因为“DOM”更好"更快。DOM有它的用途,但被高估了。RegEx是一种解析语言——DOM是一种呈现语言。这就像在读取元数据头之前等待MP3加载一样。@SamuelJackson,我确实使用DOM解析器处理其余内容,但RegEx是这里的唯一选项。你的解释让我有点困惑——取决于n如何构造捕获组,您当然不必在后处理中处理初始字符。或者您是说您的解决方案不需要使用捕获组?@NathanArthur PHP的库将返回整个匹配和匹配组,因此在本例中,它将返回两个元素的数组:整个字符串(不带引号)还有扩展名。您的解决方案将返回一个包含三个元素的数组:带引号的整个字符串、不带引号的整个字符串和扩展名。为什么在扩展名之前删除点并将量词更改为
+?
?@CamilStaps?我不打算删除点。我从头开始构建了该模式。我将编辑我的答案。我觉得使用惰性匹配更安全,而且OP可能不想匹配空URL。考虑到在示例数据中字符串也以引号结尾,量词不会真正起作用。我只是感兴趣,如果你从头开始构建它,我理解。
(?<=['"])[^'"\s]*\.(jpg|jpeg|png|gif)