函数preg_match多个url

时间:2014-07-22 04:35:48

标签: php function mobile preg-match

请帮忙。

我认为它只读取函数内部的一个preg_matches。我该怎么办?

  

function images($content) { preg_match("#http://cdn1.image.site.com/[^\.]+\.jpg#",$content,$image); preg_match("#http://cdn2.image.site.com/[^\.]+\.jpg#",$content,$image); preg_match("#http://cdn3.image.site.com/[^\.]+\.jpg#",$content,$image); preg_match("#http://cdn4.image.site.com/[^\.]+\.jpg#",$content,$image); $result['image'] = $image[0]; return $result; }

2 个答案:

答案 0 :(得分:2)

我在您的代码中添加了一些注释,以便解释它是如何工作的:

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_match在找到第一个匹配时停止,因此您的函数最多会返回四个匹配项 - 第一个匹配...cdn1...,第二个匹配...cdn2...,第三个匹配一个用于...cdn3...,第四个用于...cdn4...。只需将其中的四个合并为一个简洁的正则表达式...cdn[1-4]...,然后使用preg_match_all(没有preg_match的一个匹配限制),您可以省去所有麻烦:

function images($content){
    preg_match_all("#http://cdn[1-4].image.site.com/[^\.]+\.jpg#",$content,$image);
    $result['image'] = $image[0];
    return $result;
}

答案 1 :(得分:2)

每次调用preg_match都会将结果保存在$image中。您只能访问$image一次,因此您只能获得最后一个值。

似乎你想要这个,而不是:

function images($content) {
    preg_match("#http://cdn\d\.image\.site\.com/[^\.]+\.jpg#",$content,$image);
    $result['image'] = $image[0];
    return $result;
}