发布
社区首页 >问答首页 >regex匹配主域名

regex匹配主域名
EN

Stack Overflow用户
提问于 2012-10-07 20:05:01
回答 3查看 12K关注 0票数 5

我需要能够识别任何子域的域名。

示例:

对于所有的数据,我只需要匹配example.co / example.com / example.org / example.co.uk / example.com.au / example.gov.us等等

代码语言:javascript
代码运行次数:0
复制
www.example.co
www.first.example.co
first.example.co
second.first.example.co
no.matter.how.many.example.co
first.example.co.uk
second.first.example.co.uk
no.matter.how.many.example.co.uk
first.example.org
second.first.example.org
no.matter.how.many.example.org
first.example.gov.uk
second.first.example.gov.uk
no.matter.how.many.example.gov.uk

我整天都在玩正则表达式,整天都在搜索一些东西,但似乎仍然找不到什么。

Edit2:对于非常奇怪的情况,比如t.co,我更喜欢一个可能会失败的正则表达式,然后列出所有的TLD,并列出我没有列出的那些,但是可以预测失败,匹配的比应该的更多。这不是你会选择的选择吗?

更新:使用选择的答案作为指导,我已经构建了这个正则表达式来完成我的工作。

/([0-9a-z-]{2,}\.[0-9a-z-]{2,3}\.[0-9a-z-]{2,3}|[0-9a-z-]{2,}\.[0-9a-z-]{2,3})$/i

它可能不是完美的,但到目前为止,我还没有遇到一个失败的案例。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-07 20:12:38

这将匹配:

代码语言:javascript
代码运行次数:0
复制
([0-9A-Za-z]{2,}\.[0-9A-Za-z]{2,3}\.[0-9A-Za-z]{2,3}|[0-9A-Za-z]{2,}\.[0-9A-Za-z]{2,3})$

只要:

  1. 每一行的末尾都没有额外的空格
  2. 所有使用的域代码都是短的,两个或三个字母长。不会使用像.info这样的长域代码。

糟糕的是,它所做的就是匹配这两种方法中的任何一种:

  1. 单词二字母或longer:dot:two或三个字母word:dot:two或三个字母单词:行的末端
  2. 单词两个字母或longer:dot:two或三个字母单词:行的末端

简短版本:

代码语言:javascript
代码运行次数:0
复制
(\w{2,}\.\w{2,3}\.\w{2,3}|\w{2,}\.\w{2,3})$

如果希望它只匹配整行,那么在开头添加^。

我就是这样测试的:

票数 6
EN

Stack Overflow用户

发布于 2012-10-07 20:11:59

如果您想要一个绝对正确的匹配器,正则表达式并不是正确的方法。

为什么?

  • 因为这两个域都是有效域+ TLDs:goo.glt.co
  • 因为它们都不是(它们只是TLD):com.auco.uk

您可能创建的任何正则表达式都可以正确地处理上述所有情况,这相当于列出有效的TLDs,这将从一开始就达到使用正则表达式的目的。

相反,只需创建/获取当前TLD的列表,并查看其中一个是否存在,然后在其前面添加第一个段。

票数 5
EN

Stack Overflow用户

发布于 2015-12-15 20:37:06

这可能有什么用。这把它们分成了一个点符号。那么,这是一个简单的问题,分裂它。

[^/:"]*\.[^/:"]*

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

https://stackoverflow.com/questions/12772423

复制
相关文章

相似问题

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