1

我需要一个正则表达式来获取 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*$

但这不适用于尾部斜杠。

4

3 回答 3

2

限制为 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
于 2012-05-30T19:57:29.507 回答
2

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

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

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

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

国家代码在捕获组 1 中。

于 2012-05-30T19:59:43.040 回答
0

使用您已有的,我们可以轻松调整它以考虑尾随斜线

\w*[/]?$
于 2012-05-30T19:59:19.053 回答