我需要一个正则表达式来捕获给定的URLs。
示例:
jack.bop.com -> bop
bop.com -> bop
bop.de -> bop
bop.co.uk -> bop
bop.com.br -> bopAll bops :)。因此,此正则表达式需要忽略ccTLD、gTLD和ccSLD。后者是最困难的部分,因为我想让正则表达式尽可能的简单。
第一个任务是删除ccTLD,然后删除gTLD,然后检查ccSLD并删除它们(如果存在)。
任何帮助都是非常感谢的:)
--
如果有帮助,ccTLD可以通过以下方式进行匹配:
\.([a-z]{2})$和gTLD通过以下方式进行匹配:
\.([a-z]{3-6})$幸运的是,这是两种互斥的模式。
发布于 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的列表也足够了。
在此之后,正则表达式非常简单:
(.+\.)?([^.]+)\.(?:<suffixes>)$其中,<suffixes>是以|分隔的后缀列表。它的一部分看起来像这样:
gov\.uk|ac\.uk|co\.uk|com|org|net|us|uk有一些方法可以通过折叠公共后缀来缩短这个过程,尽管这会使regex (以及计算它的过程)变得更加复杂。例如:
(?:gov\.|ac\.|co\.|)uk|com|org|net|ushttps://stackoverflow.com/questions/4452916
复制相似问题