首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要正则表达式来捕获二级域(SLD)

需要正则表达式来捕获二级域(SLD)
EN

Stack Overflow用户
提问于 2010-12-16 01:23:41
回答 1查看 1.5K关注 0票数 1

我需要一个正则表达式来捕获给定的URLs。

示例:

代码语言:javascript
运行
复制
jack.bop.com -> bop
bop.com -> bop
bop.de -> bop
bop.co.uk -> bop
bop.com.br -> bop

All bops :)。因此,此正则表达式需要忽略ccTLD、gTLD和ccSLD。后者是最困难的部分,因为我想让正则表达式尽可能的简单。

第一个任务是删除ccTLD,然后删除gTLD,然后检查ccSLD并删除它们(如果存在)。

任何帮助都是非常感谢的:)

--

如果有帮助,ccTLD可以通过以下方式进行匹配:

代码语言:javascript
运行
复制
\.([a-z]{2})$

和gTLD通过以下方式进行匹配:

代码语言:javascript
运行
复制
\.([a-z]{3-6})$

幸运的是,这是两种互斥的模式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-12-16 01:55:01

从技术上讲,“.co.uk”是“bop.co.uk”中的二级域名。你所要求的似乎是开放公共注册的域名的最高级别部分,而你想要剥离注册商的域名。

RFC 6265 §5.3调用您不想要的后缀“公共后缀”:

“公共后缀”是由公共注册表控制的域,如"com“、"co.uk”和"pvt.k12.wy.us“。

Mozilla维护一个list of all known public suffixes

要创建正则表达式,必须枚举所有的公共后缀。您应该对它们进行排序,以便作为其他元素后缀的元素稍后出现。要做到这一点,一个简单的方法是按长度降序排序。看起来颠倒Mozilla的列表也足够了。

在此之后,正则表达式非常简单:

代码语言:javascript
运行
复制
(.+\.)?([^.]+)\.(?:<suffixes>)$

其中,<suffixes>是以|分隔的后缀列表。它的一部分看起来像这样:

代码语言:javascript
运行
复制
gov\.uk|ac\.uk|co\.uk|com|org|net|us|uk

有一些方法可以通过折叠公共后缀来缩短这个过程,尽管这会使regex (以及计算它的过程)变得更加复杂。例如:

代码语言:javascript
运行
复制
(?:gov\.|ac\.|co\.|)uk|com|org|net|us
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4452916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档