获取没有TLD的域名

时间:2011-10-13 21:45:19

标签: php preg-match

我在这里有这个代码:

    // 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

4 个答案:

答案 0 :(得分:3)

虽然这里的正则表达式很好,但我建议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的数组)来解析它们。

答案 1 :(得分:2)

将第二个正则表达式的第一部分分组为/([^.]+)\.[^.]+$/$matches[1]将为php

答案 2 :(得分:1)

最新答案,它不适用于子域,但适用于任何tld(co.uk,com.de等):

$domain = "somesite.co.uk";
$domain_solo = explode(".", $domain)[0];
print($domain_solo);

Demo

答案 3 :(得分:-1)

这很简单:

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,它仅适用于顶级域名。如果是子域,您将获得子域名。