Вопрос по regex, preg-match, php, dns, url – Preg_match: получить два последних доменных сегмента из URL в одном выражении

0

На php.net есть пример, как получить два последних доменных сегмента за два шага:

    <?php 
 //get host name from URL
preg_match("/^(http:\/\/)?([^\/]+)/i",
    "http://www.php.net/index.html", $matches);
$host = $matches[2];

// get last two segments of host name
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
echo "domain name is: {$matches[0]}\n";

/* Output is php.net */

?>

Но как я могу сделать это за один шаг, используя только одно выражение preg_match?

Ваш Ответ

1   ответ
4

$domain = 'http://www.php.net/index.html';
$url    = parse_url($domain);
$tokens = explode('.', $url['host']);

print_r($tokens);

Даст вам эти данные:

Array
(
    [0] => www
    [1] => php
    [2] => net
)

Я считаю, что нет необходимости в регулярных выражениях, поскольку очень трудно правильно проанализировать URL-адрес с ними. Из полученного массива $ tokens вы можете легко извлечь любую часть имени хоста.

Обновить:

print_r($url);

Массив $ url содержит все необходимые детали:

Array
(
    [scheme] => http
    [host] => www.php.net
    [path] => /index.html
)
@TarasBulgakov см. Обновленный пост.
@TarasBulgakov Я только что заглянул внутрь исходного кода PHP, и расширение встроенного фильтра использует этот метод для проверки URL. В прошлых версиях было одно огромное регулярное выражение, в текущих стабильных источниках эта логика регулярных выражений полностью удалена.
Конечно, вы можете сделать это с помощью регулярных выражений, и я полагаю, что есть некоторые готовые к использованию выражения, хотя из-за сложности URI очень сложно проанализировать все виды URL с помощью регулярных выражений.
Да, это будет. Но мне нужен результат из preg_match. Получитьphp.net/index.html - & GT; php.net всего за одно регулярное выражение Taras Bulgakov
Спасибо, parse_url, безусловно, самый простой способ получить домен, но могу ли я сделать то же самое, используя только одно регулярное выражение? Taras Bulgakov

Похожие вопросы