0

可能重复:
从 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 获取域吗?

4

3 回答 3

2

Try this regex :

#^https?://(www\.)?([^/]*?)(\.co)?\.[^.]+?/#
于 2012-08-14T13:10:40.427 回答
1

您可以使用该parse_url功能。医生在这里

就像是:

$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];
于 2012-08-14T13:12:20.160 回答
0

I think you don't need regex.

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];
}
于 2012-08-14T13:11:51.043 回答