Php 函数preg_匹配多个URL

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

请帮忙

我认为它只读取函数中的一个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);
预匹配(“#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;
}