Php 函数preg_匹配多个URL
请帮忙 我认为它只读取函数中的一个preg_匹配。我该怎么办Php 函数preg_匹配多个URL,php,function,mobile,preg-match,Php,Function,Mobile,Preg Match,请帮忙 我认为它只读取函数中的一个preg_匹配。我该怎么办 函数图像($content){ 预匹配(“#http://cdn1.image.site.com/[^\.]+\.jpg#“,$content,$image); 预匹配(“#http://cdn2.image.site.com/[^\.]+\.jpg#“,$content,$image); 预匹配(“#http://cdn3.image.site.com/[^\.]+\.jpg#“,$content,$image); 预匹配(“#ht
函数图像($content){
预匹配(“#http://cdn1.image.site.com/[^\.]+\.jpg#“,$content,$image);
预匹配(“#http://cdn2.image.site.com/[^\.]+\.jpg#“,$content,$image);
预匹配(“#http://cdn3.image.site.com/[^\.]+\.jpg#“,$content,$image);
预匹配(“#http://cdn4.image.site.com/[^\.]+\.jpg#“,$content,$image);
$result['image']=$image[0];
返回$result;
}
为了解释代码的工作原理,我在代码中添加了一些注释:
function images($content) {
preg_match("#http://cdn1.image.site.com/[^\.]+\.jpg#", $content, $image);
// $image is created
preg_match("#http://cdn2.image.site.com/[^\.]+\.jpg#", $content, $image);
// $image is overwritten
preg_match("#http://cdn3.image.site.com/[^\.]+\.jpg#", $content, $image);
// $image is overwritten
preg_match("#http://cdn4.image.site.com/[^\.]+\.jpg#", $content, $image);
// $image is overwritten
$result['image'] = $image[0];
return $result;
}
显然,您不想创建一个数组并覆盖它三次!因此,您可以创建四个不同的数组,如下代码所示:
function images($content) {
preg_match("#http://cdn1.image.site.com/[^\.]+\.jpg#", $content, $image1);
preg_match("#http://cdn2.image.site.com/[^\.]+\.jpg#", $content, $image2);
preg_match("#http://cdn3.image.site.com/[^\.]+\.jpg#", $content, $image3);
preg_match("#http://cdn4.image.site.com/[^\.]+\.jpg#", $content, $image4);
$result['image'] = array($image1[0], $image2[0], $image3[0], $image4[0]);
return $result;
}
但是,由于找到第一个匹配项时,preg\u match
会停止,因此函数将返回最多四个匹配项–第一个用于…cdn1…
,第二个用于…cdn2…
,第三个用于…cdn3…
,第四个用于…cdn4…
。只需将这四个表达式合并成一个简洁的正则表达式,…cdn[1-4]…
,然后使用preg\u match\u all
(它没有preg\u match
的一个匹配限制),就可以省去所有麻烦:
每次调用
preg_match
都将结果保存在$image
中。只能访问一次$image
,因此只能获取最后一个值
看起来你想要的是这个:
function images($content) {
preg_match("#http://cdn\d\.image\.site\.com/[^\.]+\.jpg#",$content,$image);
$result['image'] = $image[0];
return $result;
}
-编辑-我可能缺少标记,因为答案仍然返回单个图像。。。但是你的函数名是images(),所以我假设你想返回多个图像。。。您应该使用
preg\u match\u all(“#http://cdn\d\.image\.site\.com/[^\.]+\.jpg#“,$content,$images);返回空($images)?数组():$images[0]代码>每次调用preg_match都会覆盖上一个$image的“填充”。使用$image[]
并查看这是否有帮助
function images($content) {
preg_match("#http://cdn\d\.image\.site\.com/[^\.]+\.jpg#",$content,$image);
$result['image'] = $image[0];
return $result;
}