在php中获取域名(不是子域)

我有一个URL,可以是以下任意格式:

http://example.com
https://example.com
http://example.com/foo
http://example.com/foo/bar
www.example.com
example.com
foo.example.com
www.foo.example.com
foo.bar.example.com
http://foo.bar.example.com/foo/bar
示例.net/foo/bar

本质上,我需要能够匹配任何正常的URL。如何通过单个正则表达式从所有这些文件中提取example.com(或.net,无论tld是什么。我需要它来处理任何tld。)

您可以使用parse\u url获取主机:

$info=parse_url($url);
$host=$info['host'];

然后,您可以做一些奇特的事情,只获得TLD和主机

$host\u name=explode(“.”,$host);
$bottom_host_name=$host_name[计数($host_name)-2]。"." . $主机名[计数($host_name)-1];

不是很优雅,但应该有用


如果您需要解释,请看下面的内容:

首先,我们通过使用parse\u url的功能来获取方案之间的所有内容(http://,等等)。。。好解析URL:)

然后我们获取主机名,并根据句点所在的位置将其分隔成一个数组,因此test.world.hello.myname将变成:

数组(“测试”、“世界”、“你好”、“我的名字”);

然后,我们取数组中的元素数(4)

然后,我们从中减去2,得到倒数第二个字符串(在您的示例中是主机名,或example

然后,我们从中减去1得到最后一个字符串(因为数组键从0开始),也称为TLD

然后我们将这两个部分合并为一个句点,您就有了基本主机名

发表评论