请帮忙。
我认为它只读取函数内部的一个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; }
答案 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;
}