我试图想出一个正则expression式来匹配这种格式的任何域:
example.com
但不是这样的:
subdomain.example.com
目前,它只需要覆盖主要顶级域名(com,net,org),但我希望能够处理其他(如co.uk,com.br等)的灵活性。
到目前为止,我已经得到了这个,但它肯定需要一些工作:
^[^w].*\.[az]{3}.*$
正则expression式忍者可以帮我吗?
编辑:正则expression式将在PHP中使用,并且由于脚本的设置,从来没有一个协议在string的开始匹配。 我不得不深入脚本以获得更多关于这是为什么的细节,但我相信它只是从PHP $ _SERVERvariables中获取主机名。
编辑2:也许这将涵盖任何东西,除了一段时间,直到匹配的.xyz或.xyz.ab或.xyz.abc ^[^.]+(\.[^.]{3}|\.[^.]{2,3}\.[^.]{2,3}).*$
编辑3:我已经得到了接近完成的模式: updated below (PHP需要/和/在开始和结束)任何人都可以在执行中打洞? 它似乎按预期工作。
编辑4:这是我目前在哪里: updated below它几乎匹配我想要的,虽然它需要/在文件path的开头,所以example.com不匹配,而example.com/test。 我不能匹配example.com,没有匹配“www.example.com”中的“.exa”。
编辑5:好吧,我们有一个赢家:/ /^[^.]+((\.[^.\/]{1,3}\b){1,2}).*$/
火柴:
example.com
example.co.uk
example.com/test.php?a=b
example.co.uk/test.php?a=b
123.com
1234.com
www.123.com(匹配所有域名短于4个字符的url)
不符:
www.example.com
www.example.co.uk
www.example.com/test.php?a=b
www.example.co.uk/test.php?a=b
test.example.com/test.php?a=b
test.example.co.uk/test.php?a=b
www.1234.com
你使用什么语言?
总的来说,这听起来像是你想要的东西匹配一个域的基本方面,排除了一个可能性,而不是一个淡化.tld。
#http:// [ ^。] + \。(com | net | org)#i
如果你不想匹配协议,可能是这样的。
#[^。 ] + \。(COM |networking|组织)#I
您对处理多部分顶级域名(TLD)的需求将会使得这个问题变得很糟糕,因此您需要保留一份所有您想要匹配的手册列表。 唯一的select是做DNS查找来确定列表types。 实际上没有另一种方法来从正规expression式的域中提取子域数据,因为权限域实际上只是一些TLD(顶级域)的子域。
编辑:为了匹配顶级域名(TLD),假设他们只有不到四个字符,你可以玩类似的东西。 你将不得不弄清楚什么构成了比赛的开始和结束。 你需要一个协议的存在吗? 这是在一个段落里,有人可以键入。 如果您提供更多关于参数的细节,我们可能会提供更精确的解决scheme。
[^.]+((\.[^.]{0,3})+)
网上最好的资源之一是regexlib:
http://regexlib.com/Search.aspx?k=URL
http://regexlib.com/Search.aspx?k=TLD
匹配协议和TLD或整个查询string的有效性有很多例子