使用PHP preg_match_all以特定模式提取图像URL

使用PHP preg_match_all以特定模式提取图像URL,php,regex,preg-match-all,Php,Regex,Preg Match All,我试图用PHP preg_match_all列出字符串的所有图像URL 图像模式如下所示: 1. //c1.site.com/5/2421/38306891313_ce7844189b_n.jpg 2. \/\/c2.site.com\/2421\/24574382628_9a2af39e82_h.jpg 我能够提取以下结果: m/5/2421/38306891313_ce7844189b_n.jpg // 'm' seems to be the end of .com? 但是,我不确定如何

我试图用PHP preg_match_all列出字符串的所有图像URL

图像模式如下所示:

1. //c1.site.com/5/2421/38306891313_ce7844189b_n.jpg
2. \/\/c2.site.com\/2421\/24574382628_9a2af39e82_h.jpg
我能够提取以下结果:

m/5/2421/38306891313_ce7844189b_n.jpg // 'm' seems to be the end of .com?
但是,我不确定如何包括子域、域和.com:

preg_match_all('/([-a-z0-9_\/:.])\/([-a-z0-9_\/:.])\/([-a-z0-9_\/:.]+\.(jpg))/i', $data, $matches);
foreach($matches[0] as $image){
echo $image.'<br/>';
}

preg_match_all('/([-a-z0-9_\/:.])\\/([-a-z0-9_\/:.])\\/([-a-z0-9_\/:.]+\.(jpg))/i', $data, $matches);
foreach($matches[0] as $image){
echo $image.'<br/>';
}
preg\u match\u all('/([-a-z0-9\/:.])\/([-a-z0-9\/:.])\/([-a-z0-9\/:.]+\.(jpg))/i',$data,$matches);
foreach($将[0]匹配为$image){
echo$image.“
”; } 预匹配所有('/([-a-z0-9\/:。])\/([-a-z0-9\/:。])\/([-a-z0-9\/:。]+\.(jpg))/i',$data,$MATCHS); foreach($将[0]匹配为$image){ echo$image.“
”; }
您可以使用
解析url

<?php

$string = "//c1.site.com/5/2421/38306891313_ce7844189b_n.jpg";

print_r(parse_url($string));
?>

更好地使用。您只在正则表达式的开头匹配一个字符:
preg\u match\u all('/([-a-z0-9\/:。])\/…
。您需要一个
+
,如
preg\u match\u all('/([-a-z0-9\/:。])\/…
。您的项目实际需要多强的验证?或者删掉前面的斜杠:始终尝试最小化模式中的捕获组。我想我希望看到您在问题中的预期结果。只有在我已经提取了所有可能的图像URL时,这才有效,但我需要首先找到它们。
Array
(
    [host] => c1.site.com
    [path] => /5/2421/38306891313_ce7844189b_n.jpg
)