【问题标题】:Need a regular expression to capture second level domain (SLD)需要正则表达式来捕获二级域 (SLD)
【发布时间】:2010-12-15 17:23:40
【问题描述】:

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

例子:

jack.bop.com -> bop
bop.com -> bop
bop.de -> bop
bop.co.uk -> bop
bop.com.br -> bop

所有 bops :)。所以这个正则表达式需要忽略 ccTLD、gTLD ccSLD。后者是困难的部分,因为我想让正则表达式尽可能不复杂。

首要任务是删除 ccTLD,然后是 gTLD,然后检查 ccSLD 并在存在时将其删除。

非常感谢任何帮助:)

--

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

\.([a-z]{2})$

gTLD 匹配:

\.([a-z]{3-6})$

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

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    从技术上讲,“.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>)$
    

    其中&lt;suffixes&gt; 将是| 分隔的后缀列表。其中一部分看起来像:

    gov\.uk|ac\.uk|co\.uk|com|org|net|us|uk
    

    有一些方法可以通过折叠通用后缀来缩短它,尽管这会使正则表达式(以及计算它的过程)更加复杂。例如:

    (?:gov\.|ac\.|co\.|)uk|com|org|net|us
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多