我需要能够识别任何子域的域名。
示例:
对于所有的数据,我只需要匹配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
我整天都在玩正则表达式,整天都在搜索一些东西,但似乎仍然找不到什么。
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
它可能不是完美的,但到目前为止,我还没有遇到一个失败的案例。
发布于 2012-10-07 20:12:38
这将匹配:
([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})$
只要:
糟糕的是,它所做的就是匹配这两种方法中的任何一种:
简短版本:
(\w{2,}\.\w{2,3}\.\w{2,3}|\w{2,}\.\w{2,3})$
如果希望它只匹配整行,那么在开头添加^。
我就是这样测试的:
发布于 2012-10-07 20:11:59
如果您想要一个绝对正确的匹配器,正则表达式并不是正确的方法。
为什么?
goo.gl
、t.co
。com.au
,co.uk
。您可能创建的任何正则表达式都可以正确地处理上述所有情况,这相当于列出有效的TLDs,这将从一开始就达到使用正则表达式的目的。
相反,只需创建/获取当前TLD的列表,并查看其中一个是否存在,然后在其前面添加第一个段。
发布于 2015-12-15 20:37:06
这可能有什么用。这把它们分成了一个点符号。那么,这是一个简单的问题,分裂它。
[^/:"]*\.[^/:"]*
https://stackoverflow.com/questions/12772423
复制相似问题