Получение доменного имени без TLD

У меня есть этот код прямо здесь:

// get host name from URL preg_match('@^(?:http://)?([^/]+)@i', "http://www.joomla.subdomain.php.net/index.html", $matches); $host = $matches[1]; // get last two segments of host name preg_match('/[^.]+\.[^.]+$/', $host, $matches); echo "domain name is: {$matches[0]}\n"; 

Результатом будет php.net

Мне нужно просто php без .net

/([^.]+)\.[^.]+$/ первую часть своего второго регулярного выражения в /([^.]+)\.[^.]+$/ и $matches[1] /([^.]+)\.[^.]+$/ $matches[1] будет php

Хотя регулярные выражения здесь прекрасны, я бы рекомендовал parse_url

 $host = parse_url('http://www.joomla.subdomain.php.net/index.html', PHP_URL_HOST); $domains = explode('.', $host); echo $domains[count($domains)-2]; 

Это будет работать для TLD как .com, .org, .net и т. Д., Но не для .co.uk или .com.mx. Вам понадобится еще одна логика (скорее всего, массив tld), чтобы разобрать их.

Это очень просто:

 function get_tld($domain) { $domain=str_replace("http://","",$domain); //remove http:// $domain=str_replace("www","",$domain); //remowe www $nd=explode(".",$domain); $domain_name=$nd[0]; $tld=str_replace($domain_name.".","",$domain); return $tld; } 

Чтобы получить доменное имя, просто return $domain_name , он работает только с доменом верхнего уровня. В случае субдоменов вы получите имя поддомена.