使用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'