RegEx匹配url格式

我试图想出一个正则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的有效性有很多例子