正则表达式匹配主域名

时间:2012-10-07 20:05:01

标签: regex

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

示例:

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

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

我整天都在玩正则表达式,整天都在谷歌上寻找一些东西,似乎仍然找不到东西。

编辑2:我更喜欢一个可能因t.co之类的非常奇怪的情况而失败的正则表达式,然后列出所有顶级域名,并列出我没有列出但可能已经预测失败并且匹配得更多的那些。这不是您选择的选项吗?

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

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

它可能不完美,但到目前为止我还没有遇到失败的情况。

3 个答案:

答案 0 :(得分:5)

如果你想要一个绝对正确的匹配器,那么正则表达式就没有了。

为什么?

  • 因为这两者都是有效的域+ TLD:goo.glt.co

  • 因为这些都不是(它们只是顶级域名):com.auco.uk

您可能创建的正确处理所有上述案例的正则表达式只会列出有效的TLD,这将首先破坏使用正则表达式的目的。

相反,只需创建/获取当前顶级域名的列表并查看其中的哪一个,然后在其之前添加第一个段。

答案 1 :(得分:4)

这将匹配:

([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. 使用的所有域代码都是短的,两个或三个字母长。 Wil不能使用像.info。这样的长域代码。
  3. Bassically它的作用是匹配这两者中的任何一个:

    1. 字母两个字母或更长::两个或三个字母字::两个或三个字母字:行尾 < / LI>
    2. 字母两个字母或更长::两个或三个字母字:行尾
    3. 简短版本:

      (\w{2,}\.\w{2,3}\.\w{2,3}|\w{2,}\.\w{2,3})$
      

      如果您希望它仅匹配整行,则在开头添加^

      这是我测试它的方式:

      enter image description here

答案 2 :(得分:0)

这可能有用。这将它们分成点符号。 然后将它拆分是一件简单的事     [^ /:&#34;] [^ /:&#34]。