使用PHP获取域名(不使用TLD)

时间:2012-08-14 13:05:08

标签: php

  

可能重复:
  Get the subdomain from a URL

我见过有关使用parse_url获取www.domain.tld的帖子,但我怎样才能使用php获取“域名”?

我目前有这个正则表达式

$pattern = '@https?://[a-z]{1,}\.{0,}([a-z]{1,})\.com(\.[a-z]{1,}){0,}@';

但这仅适用于.com,我需要它与所有TLD(.co.uk,.com,.tv等)合作。

有没有可靠的方法来做到这一点,我不确定正则表达式是否是最好的方式?或者可能在“。”上爆炸。但是再次子域名会搞砸它。

修改

所以期望的结果将是

$url = "https://stackoverflow.com/questions/11952907/get-domain-without-tld-using-php#comment15926320_11952907";

$output = "stackoverflow";

进行更多研究有人会建议使用parse_url获取www.domain.tld,然后使用explode来获取域名吗?

3 个答案:

答案 0 :(得分:2)

试试这个正则表达式:

#^https?://(www\.)?([^/]*?)(\.co)?\.[^.]+?/#

答案 1 :(得分:1)

您可以使用parse_url功能。 Doc是here

类似的东西:

$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url));

然后你可以选择$url['host']并执行:

$arr = explode('.',$url['host']);
return $arr[count($arr) - 2];

答案 2 :(得分:0)

我认为你不需要正则表达式。

function getDomain($url){
    $things_like_WWW_at_the_start = array('www');
    $urlContents = parse_url($url);
    $domain = explode('.', $urlContents['host']);

    if (!in_array($domain[0], $things_like_WWW_at_the_start))
        return $domain[0];
    else
        return $domain[1];
}