Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP正则表达式提取TLD_Php_Regex_Text Parsing - Fatal编程技术网

使用PHP正则表达式提取TLD

使用PHP正则表达式提取TLD,php,regex,text-parsing,Php,Regex,Text Parsing,我有一个如下格式的域名数组: www.example.com www.example.co.uk 我想从中提取顶级TLD,这将导致(分别): 为了在PHP中实现这一点,我使用正则表达式: preg_match("`(?<=\.)\w+$`", $cc, $tld_array); 如上所述,但仅收到 NULL uk 有人知道为什么二级TLD工作而一级TLD不工作吗 RegExr建议他们也应该这样做:在这里发布评论,因为评论不适用于此: php > $cc = 'www.examp

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

www.example.com
www.example.co.uk
我想从中提取顶级TLD,这将导致(分别):

为了在PHP中实现这一点,我使用正则表达式:

preg_match("`(?<=\.)\w+$`", $cc, $tld_array);
如上所述,但仅收到

NULL
uk
有人知道为什么二级TLD工作而一级TLD不工作吗


RegExr建议他们也应该这样做:

在这里发布评论,因为评论不适用于此:

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

php>preg_match(`(?您不必对所有内容都使用正则表达式:-)一个很好的替代方法:

echo substr($domain, strrpos($domain, ".")+1);

如果您想在不使用正则表达式的情况下实现这一点,我建议在

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

如果您只需要从“www.example.co.uk”中提取“uk”,那么使用字符串函数的解决方案是相当不错的。但是,这不是提取真实TLD的正确方法,例如,“www.example.co.uk”的TLD是“co.uk”,而不是“uk”

您需要使用的包,只有这样您才能正确提取具有两级、三级TLD(co.uk、a.bg、b.bg等)的域。我建议使用

下面是代码示例:

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

$result = $extract->parse('www.example.co.uk');
$result->getSuffix(); // will return (string) 'co.uk'

您正在从$tld_数组[0]检索字符串吗我再次运行我的查询,并进行了一些调试,以查看正在发生的情况。您是对的,输入中存在意外字符。这对具有两个域名的com.de或tld不起作用。当然,这只会找到第一个域名。因此,例如,对于www.example.co.uk,它将返回example.co.uk?不,如果我使用strpos代替of strrpos。后一个函数从头到尾搜索,所以我的答案很有效。整洁!谢谢。我会将你的答案标记为正确,但从技术上讲,Marc B的答案是我问题的最直接答案,所以必须交给他。无论你的船漂浮在哪里:-)谢谢,伙计-我确实使用strpos而不是strrpost来获取sld和tld…我看不出有任何问题-我想我可能会面对任何类型的域?
echo substr($domain, strrpos($domain, ".")+1);
$url = 'http://username:password@hostname:9090/path?arg=value#anchor';
var_dump(parse_url($url, PHP_URL_HOST));
$extract = new LayerShifter\TLDExtract\Extract();

$result = $extract->parse('www.example.co.uk');
$result->getSuffix(); // will return (string) 'co.uk'