我们以此格式(http://www.xyz.gov.ac.in
)列出了网址。并非所有这些都看起来像这样,其中一些有正常的域名。我对如何从3个虚线网址获取域名感到困惑。我们的代码适用于2个虚线域名。
这是我们的代码:
function get_domain($url)
{
$pieces = parse_url($url);
$domain = isset($pieces['host']) ? $pieces['host'] : '';
if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
return $regs['domain'];
}
return false;
}
echo get_domain($url) ;
我们如何修改上述代码以适应3个虚线域以及其他类型?
回声结果应采用此格式xyz.gov.ac.in
答案 0 :(得分:1)
基本上,你不能。至少没有一个包含所有“TLD”的查找表。
例如,在我的国家(荷兰),我们有.nl
和.co.nl
。但www.gov.nl
是一个普通的网站(我试图说明你不能自动说gov.
不是域名)。并且www.edu.nl
不存在。
任何尝试解析它们的标准正则表达式都会告诉您该域名为www.gov.nl
,而域名实际为gov.nl
。与edu.nl
相同。
您可以通过获取所有TLD(和子TLD)的列表并使用它来解析它们来实现您想要的唯一方式。
我相信Firefox和Chrome已经实现了这样的列表(用于为URL中的域名着色)并且不断地使其保持最新状态。也许看看那些来源?
答案 1 :(得分:0)
试试这个:
/(^[\w|-]+\.)(?P<domain>([\w|-]+\.)+(\w+))/i
希望这会有所帮助..
答案 2 :(得分:0)
您应该可以使用此正则表达式
/(?P<domain>([a-z0-9][a-z0-9\-]{1,63}\.)+[a-z\.]{2,6})$/i