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

この正規表現を試してください:

#^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

正規表現は必要ないと思います。

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 に答える