你为什么要使用正则表达式?有很多原生函数可供您使用,例如:
$host = parse_url($url, PHP_URL_HOST);
更新,试试看,它可能需要改进,但它比 Regex imo 更好
function determainDomainName($url)
{
$hostname = parse_url($url, PHP_URL_HOST);
$parts = explode(".",$hostname);
switch(count($parts))
{
case 1:
return $parts[0]; //has to be a .com etc
break;
case 2:
if($parts[1] == "www") //The most common subdomain
{
return $parts[2]; //Bypass Subdomain / return next segment
}
if($parts[2] == "co") //Possible in_array here for multiples, but first segment of double barrel tld
{
return $parts[1]; //Bypass double barrel tld's
}
break;
default:
//Have a guess
//I bet the longest word is the domain :)
usort($parts,"mysort");
return $parts[0];
/*
here we just order the array by the longest word
so google will always come above the following
com,co,uk,www,cdn,ww1,ww2 etc
*/
break;
}
}
function mysort($a,$b){
return strlen($b) - strlen($a);
}
将以下 2 个函数添加到您的库等中。
然后像这样使用:
$urls = array(
'http://www.google.com/tomato',
'http://int.google.com',
'http://google.co.uk'
);
foreach($urls as $url)
{
echo determainDomainName($url) . "\n";
}
他们都会回显google
见@http://codepad.org/pA5KWckb