我需要能够识别任何子域的域名。
示例:
对于所有人,我只需要匹配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
它可能不完美,但到目前为止我还没有遇到失败的情况。
答案 0 :(得分:5)
如果你想要一个绝对正确的匹配器,那么正则表达式就没有了。
为什么?
因为这两者都是有效的域+ TLD:goo.gl
,t.co
。
因为这些都不是(它们只是顶级域名):com.au
,co.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})$
只要:
Bassically它的作用是匹配这两者中的任何一个:
简短版本:
(\w{2,}\.\w{2,3}\.\w{2,3}|\w{2,}\.\w{2,3})$
如果您希望它仅匹配整行,则在开头添加^
这是我测试它的方式:
答案 2 :(得分:0)
这可能有用。这将它们分成点符号。 然后将它拆分是一件简单的事 [^ /:"] [^ /:&#34]。