我有一系列格式如下的域名:
www.example.com
www.example.co.uk
我想从中提取顶级顶级域名,这将分别导致:
com
uk
要在PHP中执行此操作,我使用的是正则表达式:
preg_match("`(?<=\.)\w+$`", $cc, $tld_array);
这是为了匹配域中的最后.
直到字符串的结尾。我希望这能给我
com
uk
如上所述,但仅收到
NULL
uk
任何人都可以看到为什么二级TLD正在运行而一级TLD没有?
RegExr建议他们也应该这样做:http://regexr.com?31gsg
答案 0 :(得分:13)
你不必为所有事情使用正则表达式:-)一个不错的选择:
echo substr($domain, strrpos($domain, ".")+1);
答案 1 :(得分:0)
由于评论不适用于此,因此在此处发布:
php > $cc = 'www.example.com';
php > preg_match("`(?<=\.)\w+$`", $cc, $tld_array);
php > print_r($tld_array);
Array
(
[0] => com
)
如果这对您不起作用,请确保您的example.com字符串中没有隐藏一些不可打印的字符。
答案 2 :(得分:0)
如果你想在没有正则表达式的情况下这样做,我建议在http://php.net/manual/en/function.parse-url.php使用php的parse_url函数
示例(您也可以在php.net上找到它):
{{1}}
答案 3 :(得分:0)
如果你只需要从“www.example.co.uk”中提取“uk”,那么带字符串函数的解决方案就相当不错了。但是,这不是提取真实TLD的正确方法,例如,“www.example.co.uk”的TLD是“co.uk”,而不是“uk”。
您需要使用Public Suffix List的软件包,只有这样您才能正确提取具有二级,三级TLD(co.uk,a.bg,b.bg等)的域。我建议使用TLD Extract。
这里是代码示例:
log4j.appender.S.layout.ConversionPattern= %d{yyyy-MM-dd HH:mm:ss zzz}{GMT} %-5p [%t][%c:%M(%L)] %m%n