0

我们以这种格式 ( http://www.xyz.gov.ac.in) 列出 URL。并非所有人都像这样,其中一些具有正常的域。我对如何从 3 点 url 获取域名感到困惑。我们拥有的代码适用于 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

4

3 回答 3

1

基本上,你不能。至少不是没有包含所有“TLD”的查找表。

例如,在我的国家(荷兰),我们有.nl.co.nl。但是www.gov.nl是一个普通的网站(我试图说明你不能自动说这gov.不是一个域)。并且www.edu.nl不存在。

任何试图解析它们的标准正则表达式都会告诉您域是www.gov.nl,而域实际上是gov.nl。对edu.nl.

您可以完成您想要的唯一方法是获取所有 TLD(和子 TLD)的列表并使用它来解析它们。

我相信 Firefox 和 Chrome 已经实现了这样一个列表(用于为 URL 中的域名着色)并不断更新。也许看看那些来源?

于 2012-04-23T13:07:52.473 回答
0

试试这个:

/(^[\w|-]+\.)(?P<domain>([\w|-]+\.)+(\w+))/i    

希望这会有所帮助..

于 2012-04-23T12:03:04.187 回答
0

您应该可以改用此 Regex

/(?P<domain>([a-z0-9][a-z0-9\-]{1,63}\.)+[a-z\.]{2,6})$/i
于 2012-04-23T12:07:12.207 回答