SergeyMakhnov
@SergeyMakhnov
PHP Developers

Как использовать parse_url для строки с несколькими url?

Здравствуйте.
Имеется строка, содержащая несколько url в формате:
https://example.ru/example/ https://example1.ru/example1 https://example2.ru/example2

И т.д, url в строке может быть сколько угодно, есть с https, есть http, разные в общем.

Необходимо преобразовать их к виду
example.ru example1.ru example2.ru

Пробовал это сделать с помощью функции parse_url($url, PHP_URL_HOST);, но она преобразует только самый первый url в строке, т.е. получается
example.ru https://example1.ru/example1 https://example2.ru/example2


Можно ли как-то заставить parse_url обрабатывать все строки? Пробовал гуглить решение с помощью preg_replace, но ни одного рабочего не нашел.
  • Вопрос задан
  • 120 просмотров
Решения вопроса 2
@Nc_Soft
<?php
$text = 'https://example.ru/example/ https://example1.ru/example1 https://example2.ru/example2';
$array = preg_split('~\s+~', $text);
$urls = array_map(function ($split) {
    return parse_url($split, PHP_URL_HOST);
}, $array);
var_dump($urls);
Ответ написан
@IS-Builder
~ PHP-8 & REGEXP - This is a really powerful kit ~
SergeyMakhnov можно регуляркой собрать всё в массив:
$str = 'https://example.ru/example/ https://example1.ru/example1 https://example2.ru/example2';

$url = [];
! preg_match_all('~https?://\K[^/]+~', $str, $url) ?: $url = $url[0];

var_dump($url);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы