2

我有一个域名数组,格式如下:

www.example.com
www.example.co.uk

我想从中提取顶级 TLD,这将导致(分别):

com
uk

要在 PHP 中执行此操作,我使用的是正则表达式:

preg_match("`(?<=\.)\w+$`", $cc, $tld_array);

这意味着匹配.域中的最后一个直到字符串的末尾。我希望这能给我

com
uk

如上,但只收到

NULL
uk

谁能明白为什么二级 TLD 有效而一级 TLD 无效?

RegExr 建议他们也应该这样做:http ://regexr.com?31gsg

4

4 回答 4

16

您不必对所有内容都使用正则表达式:-) 一个不错的选择:

echo substr($domain, strrpos($domain, ".")+1);
于 2012-07-12T10:56:31.433 回答
0

如果您想在没有正则表达式的情况下执行此操作,我建议在http://php.net/manual/en/function.parse-url.php使用 php 的 parse_url 函数

示例(您也可以在 php.net 上找到它):

$url = 'http://username:password@hostname:9090/path?arg=value#anchor';
var_dump(parse_url($url, PHP_URL_HOST));
于 2016-04-13T15:52:46.130 回答
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

这里的代码示例:

$extract = new LayerShifter\TLDExtract\Extract();

$result = $extract->parse('www.example.co.uk');
$result->getSuffix(); // will return (string) 'co.uk'
于 2016-06-22T10:07:42.530 回答
-1

由于评论不适用于此,因此在此处发布:

php > $cc = 'www.example.com';
php > preg_match("`(?<=\.)\w+$`", $cc, $tld_array);
php > print_r($tld_array);
Array
(
    [0] => com
)

如果这对您不起作用,请确保您的 example.com 字符串中没有隐藏一些不可打印的字符。

于 2012-07-12T10:38:39.007 回答