У меня есть этот код прямо здесь:
// 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
, он работает только с доменом верхнего уровня. В случае субдоменов вы получите имя поддомена.