我见过有关使用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来获取域名吗?
答案 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];
}