【发布时间】:2016-11-23 23:14:15
【问题描述】:
我有一个非常简单的函数来获取 URL 的域。我从返回的字符串中寻找的只是域名(不是“www.example.com”,而是“example.com”)。
我正在测试该功能,除了长度小于 7 个字符的域外,它似乎没问题。
这是我的示例输入和输出:
输入:http://www.example.com/asdf.html -- 输出:example.com
输入:http://www.1234.com/asdf -- 输出:1234.com
输入:http://www.exampl.com/asdf -- 输出 www.exampl.com
让我失望的是最后一个输入/输出。我不明白为什么当域少于 7 个字符时函数会返回 www.。
代码如下:
function getDomain($url = STR_EMP) {
preg_match("/[a-zA-Z0-9\-\_]{1,63}\.[a-z\.]{2,10}$/", parse_url($url, PHP_URL_HOST), $_domain_tld);
return $_domain_tld[0];
}
$url1 = "http://www.example.com/asdf.html"; // example.com
$url2 = "http://www.1234.com/asdf"; //1234.com
$url3 = "http://www.exampl.com/asdf"; // www.exampl.com
var_dump(getDomain($url1), getDomain($url2), getDomain($url3));
(输出)
string(11) "example.com"
string(8) "1234.com"
string(14) "www.exampl.com"
我不是 RegEx 的专家,但看起来 6 个字母的域符合表达式中的 {1,63} 标准。有人可以解释为什么 6 字符 www.exampl.com 域返回 www. 吗?
有没有我可以使用的 RegEx 来防止较短的 URL 出现这种情况?
提前致谢。
更新:
域的标准:
some.site.com 应该输出site.com
a.nother.site.com 也应该输出site.com
【问题讨论】:
-
首先,正确转义正则表达式
-
您的预期输出标准是什么?如果输入是
some.site.com,你想要site.com还是some.site.com(应该只去掉www.)?a.longer.one.com呢?你想要one.com吗?longer.one.com? -
我想要
site.com和one.com,对不起。 -
我会试试@anubhava 谢谢