首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配Domain.CCTLD的正则表达式

匹配Domain.CCTLD的正则表达式
EN

Stack Overflow用户
提问于 2010-07-07 22:16:13
回答 3查看 5K关注 0票数 9

有人知道匹配Domain.CCTLD的正则表达式吗?我不想要子域,只想要“原子域”。例如,docs.google.com没有得到匹配,但是google.com得到了匹配。但是,像.co.uk、CCTLDs这样的东西会使事情变得复杂。有人知道解决办法吗?提前谢谢。

编辑:--我意识到我还必须处理多个子域,比如john.doe.google.co.uk。现在比以往任何时候都更需要一个解决方案:P。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-08 21:41:39

基于您上面的评论,我将重新解释这个问题--而不是做一个匹配它们的正则表达式,我们将创建一个与它们相匹配的函数,并应用该函数来筛选一个域名列表,只包含第一类域,例如google.com、amazon.co.uk。

首先,我们需要一个TLD的列表。正如Greg提到的,公共后缀列表是一个很好的起点。让我们假设您已经将列表解析为一个名为suffixes的python数组。如果你对此并不满意,我可以添加一些代码来完成它。

代码语言:javascript
复制
suffixes = parse_suffix_list("suffix_list.txt")

现在,我们需要识别给定域名是否与模式匹配的代码-name.后缀:

代码语言:javascript
复制
def is_domain(d):
    for suffix in suffixes:
        if d.endswith(suffix):
            # Get the base domain name without suffix
            base_name = d[0:-(suffix.length + 1)]
            # If it contains '.', it's a subdomain. 
            if not base_name.contains('.'):
                return true
    # If we get here, no matches were found
    return false
票数 3
EN

Stack Overflow用户

发布于 2010-07-07 22:23:45

听起来,您正在寻找通过公共后缀列表项目可以获得的信息。

“公共后缀”是指互联网用户可以直接注册姓名的后缀。一些公共后缀的例子是".com“、".co.uk”和"pvt.k12.wy.us“。公共后缀列表是所有已知公共后缀的列表。

没有一个正则表达式可以合理地匹配公共后缀列表。您需要实现代码才能使用公共后缀列表,或者找到一个已经这样做的现有库。

票数 8
EN

Stack Overflow用户

发布于 2010-07-07 22:32:23

我可能会通过获得一个完整的TLD列表并使用它来创建regex来解决这个问题。例如(在Ruby中,对不起,还不是Pythonista ):

代码语言:javascript
复制
tld_alternation = ['\.com','\.co\.uk','\.eu','\.org',...].join('|')
regex = /^[a-z0-9]([a-z0-9\-]*[a-z0-9])?(#{tld_alternation})$/i

我认为,如果不知道TLD的实际列表,就不可能正确区分TLD和子域(也就是说,如果您知道正则表达式是如何工作的,那么始终可以构造一个看起来像TLD的子域)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3199343

复制
相关文章

相似问题

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