2012-05-30 93 views
0

我需要一个正则表达式来获得一个URL的扩展名,如国家代码的国家代码...我需要一个正则表达式来得到一个URL

比如我有3个站点对于三个国家/地区有以下不同的域名扩展。

http://www.domain.com 
domain.de/ 
domain.co.uk 

我需要一个正则表达式来获取上述字符串中的url扩展。返回“com”,“de”或“uk”

请记住,该域可能是具有或不带尾随斜线的不同字符串。

那么完美的正则表达式将能够拉去了以下蜇伤:

"domain.de" or "http://www.domain.de" or "www.domain.de/" 

我来最接近的是使用以下:

\w*$ 

但可惜这并未”不要用尾随斜线工作。

+3

您希望.com,.de或.co.uk或.com或.com,.co或.uk吗? –

回答

2

考虑后行:

\.([a-z]{2,3})\/?$ 

这需要国家从所有类型的输入,你给我们:

http://www.domain.com 
domain.de 
http://www.domain.de 
www.domain.de/ 

国家代码在捕获组1中。

1

限制对HTTP和HTTPS,您可以使用:

/^(https?:\/\/)?([^@\/][email protected])?[a-z0-9.]+\.([a-z]{2,4})(:[0-9]+)?\/?$/ 
             ^^^^^^^^^^^^ 

你会在$ 3找出TLD。

$ php -r '$t="example.ca"; preg_match("/^(https?:\/\/)?([^@\/][email protected])?[a-z0-9.]+\.([a-z]{2,4})(:[0-9]+)?\/?$/", $t, $m); print $m[3]."\n";' 
ca 
$ php -r '$t="http://user:[email protected]/"; preg_match("/^(https?:\/\/)?([^@\/][email protected])?[a-z0-9.]+\.([a-z]{2,4})(:[0-9]+)?\/?$/", $t, $m); print $m[3]."\n";' 
ca 
+0

我会避免自己做这么多的URL解析。也许可以使用[parse_url()](http://php.net/manual/en/function.parse-url.php)来获取域名,然后从那里开始你的正则表达式。 – kevlar1818

0

使用你已经有了,我们可以很容易地调整它,如果你需要一个正则表达式的工作只在您添加它可以很容易的例子削减

\w*[/]?$ 
相关问题