首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >域和扩展的正则表达式不能处理双字扩展

域和扩展的正则表达式不能处理双字扩展
EN

Stack Overflow用户
提问于 2016-10-06 11:27:23
回答 3查看 327关注 0票数 1

我很难让这个正则表达式在非简单域上工作。

代码语言:javascript
复制
((https?):\/\/)?(\w+\.)*(?P<domain>\w+)\.(?P<extension>\w+)(\.\w+)(\/.*)?

它的作用是:

代码语言:javascript
复制
http://google.com
https://google.com
http://www.google.com
https://www.google.com

因此,在上述示例中,它将域识别为google,将扩展识别为.com

但是,如果它是一个双词扩展,它就会结束:

代码语言:javascript
复制
http://www.google.com.hk

在上面的例子中,域被看作是.com,扩展被看作是.hk

你知道我如何调整正则表达式来理解.com.hk风格扩展吗?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-06 11:55:30

允许一个可选的“点对点字”作为扩展名的一部分:

代码语言:javascript
复制
((https?):\/\/)?(\w+)\.(?P<domain>\w+)\.(?P<extension>\w+(\.\w+)?)(\/.*)?

我还从url的第一部分捕获中删除了*量词。

票数 1
EN

Stack Overflow用户

发布于 2016-10-06 11:46:05

试试这个- .*\:\/\/(?:www\.)?([^\/ ]+)

它将与示例中的扩展匹配。它停在一个/或一个空间。

票数 0
EN

Stack Overflow用户

发布于 2016-10-06 19:30:17

没有与域名相关的扩展概念,只有FQDN (完全限定域名)、TLD (顶级域名)、标签和子域。

如果我以你的最后一个例子http://www.google.com.hk

  • wwwgooglecomhk是标签
  • www.google.com.hk是一个域,而FQDN
  • hk是一个域,因为它是最后一个域,所以它是
  • com.hkhk子域。
  • google.com.hkcom.hk子域。
  • www.google.com.hkgoogle.com.hk子域。

重要的是,标签com在这里没有什么特别之处,而且可以是任何东西。它没有TLD的约束(TLD不能是任何东西,您可以找到一个列表https://www.icann.org/resources/pages/listing-2012-02-25-en)。

结论com.hkgoogle.hkgoogle.compizza.orgorg.pizza (是存在TLD pizza )没有区别,它们都有两个由点分隔的标记: TLD及其子结构域。

注意:有时最后两个标签称为SLD (二级域)。

无论您使用哪种语言,regex都是不适合的,如果您想解析URL,主要原因有两个:

  • URL语法比您想象的要复杂得多
  • 大多数语言都有这样的工具( Python中的urllib.parse,PHP中的parse_url,C#中的URI类,Java中的java.net.URL,nodejs中的url模块)。

使用这些工具,您可以轻松地从URL中提取主机名。

在您需要首先检查这个主机名是否不是IPv4之后,因为在这种情况下,点没有相同的含义(这里没有将一个FQDN拆分成标签,而是分隔这四个数字),或者一个IPv6。

然后,只需拆分主机名并获取最后一项即可获得TLD。您可以将剩下的项重新加入,以获得主机名的“子域部分”。

如果您的目标是分离位于TLDs列表中的所有标签,则必须以您希望的方式将此列表包括在代码中,并检查项目是否在其末尾。

但是再一次,域名中没有“扩展”,“双字扩展”更少了。

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

https://stackoverflow.com/questions/39894769

复制
相关文章

相似问题

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