Php 使用preg_match_all提取网页上的所有图像链接

Php 使用preg_match_all提取网页上的所有图像链接,php,regex,image,preg-match-all,Php,Regex,Image,Preg Match All,我对preg|u match|u all函数中的模式“/([a-z-\u 0-9/\:.]*(jpg | jpeg | png))/I”有点问题。诚然,我的正则表达式有点弱,所以我怀疑里面出了问题 这是我目前的情况- preg_match_all("/([a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png))/i", $raw, $matching) $raw只是此页面中的HTML- 页面上有一堆没有被拉入的图像,我得到的只是以下($matching数组的[0]——其余是不同格

我对preg|u match|u all函数中的模式“/([a-z-\u 0-9/\:.]*(jpg | jpeg | png))/I”有点问题。诚然,我的正则表达式有点弱,所以我怀疑里面出了问题

这是我目前的情况-

preg_match_all("/([a-z\-_0-9\/\:\.]*\.(jpg|jpeg|png))/i", $raw, $matching)
$raw只是此页面中的HTML-

页面上有一堆没有被拉入的图像,我得到的只是以下($matching数组的[0]——其余是不同格式的重复数据)

如果有人能给我一点信息,为什么这不是拉在页面上的每一张图片,只有这8张图片

正则表达式中有什么东西限制了我得到的结果吗

我没有得到这个jpg链接-- 即使它在页面上

任何帮助都将不胜感激


格雷格(Greg)

我用了这个,当梅利奥特(MElliott)把他从你那里得到的评论放进去时,我还从页面上得到了25张图片

preg_match_all('/([-a-z0-9_\/:.]+\.(jpg|jpeg|png))/i', $raw, $matches);

print "<pre>"; print_r($matches[0]); print "</pre>";
preg\u match\u all('/([-a-z0-9\/:.]+\(jpg | jpeg | png))/i',$raw,$matches);
打印“”;打印($matches[0]);打印“”;

我唯一要提到的是,您不需要转义character类中的所有字符,只需转义正斜杠,因为它是您正在使用的分隔符。此外,您应该在字符类后使用加号
+
而不是星号
*
,以确保图像名称中至少有一个字符。

正则表达式是解析html的一种糟糕方法,请尝试改用
DOMDocument
以确保jpg不再在页面上。我用next regexp获得了25张图像:
preg\u match\u all(“/(?-基本上可以归结为Crisp提到的内容。是的,你的正则表达式似乎工作正常。它可以拾取25幅图像,如果你添加.gif,它会拾取36幅图像。大家好,我故意跳过gif,只是因为相关的图像是jpg的。那么,可能preg_match_All的数量不正确。我会查看文档-但这不只是让你找到IMG标签吗?我想要所有指向上面提到的图像扩展的URL。谢谢你的帮助。:-)
preg_match_all('/([-a-z0-9_\/:.]+\.(jpg|jpeg|png))/i', $raw, $matches);

print "<pre>"; print_r($matches[0]); print "</pre>";