我的网址可以是以下任何一种格式:
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 example.net/foo/bar
本质上,我需要能够匹配任何常规URL。我如何example.com 通过一个正则表达式从所有这些文件中提取(或.net,无论tld刚好是什么。我需要它与任何TLD一起使用)?
example.com
好了,您可以parse_url用来获取主机:
parse_url
$info = parse_url($url); $host = $info['host'];
然后,您可以做一些有趣的事情,仅获取TLD和主机
$host_names = explode(".", $host); $bottom_host_name = $host_names[count($host_names)-2] . "." . $host_names[count($host_names)-1];
不是很优雅,但应该可以。
如果您想要一个解释,请按照以下步骤进行:
首先,我们http://使用parse_url的功能来抓取方案之间的所有内容(,等等),…解析URL。:)
http://
然后我们采用主机名,并根据句点所在的位置将其分成一个数组,因此test.world.hello.myname将变为:
test.world.hello.myname
array("test", "world", "hello", "myname");
之后,我们获取数组(4)中的元素数。
然后,我们从中减去2得到倒数第二个字符串(example在您的示例中,主机名或)
example
然后,我们从中减去1以获得最后一个字符串(因为数组键从0开始),也称为TLD
然后,我们将这两部分与一个句点结合起来,您便有了基本主机名。