使用PHP正则表达式提取TLD

时间:2012-07-12 10:32:34

标签: php regex text-parsing

我有一系列格式如下的域名:

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

4 个答案:

答案 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