функция preg_match несколько URL-адресов

Вопрос:

Пожалуйста помоги.

Я думаю, что он читает только один из 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; }

Лучший ответ:

Ive добавил несколько комментариев к вашему коду, чтобы объяснить, как это работает:

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]... регулярное выражение ...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

Каждый вызов preg_match сохраняет результаты в $image. Вы получаете доступ только к $image один раз, поэтому вы получаете только последнее значение.

Похоже, вы хотите этого, вместо этого:

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

Оцените статью
TechArks.Ru
Добавить комментарий