我需要一个正则表达式来获取 URL 的国家/地区代码


I need a regular expression to get the country code of an URL

我需要正则表达式来获取 URL 的扩展名,例如国家/地区代码......

例如,我有 3 个网站,它们在三个国家/地区具有不同的域扩展名,如下所示。

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

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

请记住,域可能是带有尾部斜杠或没有尾部斜杠的不同字符串。

因此,完美的正则表达式将能够将 de 从以下刺痛中拉出来:

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

我最接近的是使用以下方法:

'w*$

但是唉,这不适用于尾随斜杠。

如果您需要正则表达式仅适用于您添加的示例,那么它非常简单:

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

这将从您提供给我们的所有类型的输入中获取国家/地区:

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

国家/地区代码位于捕获组 1 中。

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

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

您会在 3 美元中找到 TLD。

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

使用您已有的内容,我们可以轻松调整它以考虑尾部斜杠

'w*[/]?$