PHP регулярное выражение получить первый URL из строки

0

Я использую следующее регулярное выражение в 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.

Показать ещё 1 комментарий
Теги:

5 ответов

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

Согласно документации:

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
1

Используйте preg_match вместо preg_match_all

1

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() для ваших флагов. Ссылка здесь!

0
^.*?(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

Просто напечатайте 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню