Я использую следующее регулярное выражение в PHP для захвата URL-адресов из строки
regex = '/https?\:\/\/[^\" ]+/i';
$string = "lorem ipsum http://google.com lorem ipusm dolor http://yahoo.com/something";
preg_match_all($regex, $string, $matches);
$urls = ($matches[0]);
$urls
возвращает все URL-адреса. Как вернуть только первый URL? В этом случае http://google.com
.
Я пытаюсь достичь этого, не используя цикл foreach.
Согласно документации:
preg_match_all - выполнить глобальное регулярное выражение
Поскольку вы используете только один, вы должны использовать preg_match
:
Выполните регулярное выражение
$regex = '/https?\:\/\/[^\" ]+/i';
$string = "lorem ipsum http://google.com lorem ipusm dolor http://yahoo.com/something";
preg_match($regex, $string, $matches);
echo $matches[0];
Урожайность:
http://google.com
Используйте preg_match вместо preg_match_all
preg_match_all()
имеет параметр флага, который вы можете использовать для упорядочения результатов. Параметр, в котором у вас есть переменные $matches
является вашим результатом и должен быть указан в этом массиве.
$matches[0][0];//is your first item.
$matches[0][1];//is your second
Было бы лучше использовать preg_match()
а не preg_match_all()
.
Здесь представлена документация по preg_match_all()
для ваших флагов. Ссылка здесь!
^.*?(https?\:\/\/[^\" ]+)
Попробуйте this.Grab захвата или group.See демо.
https://regex101.com/r/pM9yO9/5
$re = "/^.*?(https?\\:\\/\\/[^\\\" ]+)/";
$str = "lorem ipsum http://google.com lorem ipusm dolor http://yahoo.com/something";
preg_match_all($re, $str, $matches);
Просто напечатайте 0-й индекс.
$regex = '/https?\:\/\/[^\" ]+/i';
$string = "lorem ipsum http://google.com lorem ipusm dolor http://yahoo.com/something";
preg_match_all($regex, $string, $matches);
$urls = ($matches[0]);
print_r($urls[0]);
Вывод:
http://google.com