почему вы пытаетесь использовать регулярное выражение? есть много встроенных функций, доступных для вас, таких как:
$host = parse_url($url, PHP_URL_HOST);
обновление, дать этому идти, возможно, потребуется улучшение, но лучше, чем Regex имо
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
По какому правилу вы выберете 'google' из третьего примера, а не' co'? –
Ровно! Я пробовал регулярное выражение на «//», но это не сработало ... может быть, требуется двойной preg_split? – David19801
Для проверки правильности домена см. Http://stackoverflow.com/a/16491074/112731 –