2

我对 Regex 完全陌生,并且一直试图做到这一点,但收效甚微。

基本上我想要做的是创建一个匹配任何谷歌域的正则表达式,如 Google.com、Google.co.uk 等。

到目前为止,我有^http://www.google\.com/.*$,但这仅与 Google.com 匹配。我如何修改它以允许任何扩展com

谢谢!

4

1 回答 1

5

您可以使用替代,但是您必须提供所有您想要允许的 TLD:

^http://www\.google\.(?:com|co\.uk|de|es)/.*$

添加更多由管道分隔的选项。或者,您可以允许任何TLD(无论是否有效):

^http://www\.google\.[a-z.]+/.*$

但是,这也将匹配类似http://www.google.myowndomain.com/. 我认为不会有任何方法只允许有效域而不列出所有域。

顺便说一句,如果您想让斜杠和最后的路径/查询成为可选,请将其更改为以下之一:

^http://www\.google\.(?:com|co\.uk|de|es)(?:/.*)?$
^http://www\.google\.[a-z.]+(?:/.*)?$

然后你可以更进一步,使www.可选:

^http://(?:www\.)?google\.(?:com|co\.uk|de|es)(?:/.*)?$
^http://(?:www\.)?google\.[a-z.]+(?:/.*)?$

您会看到,为给定问题匹配所有可能但有效的 URL 并非易事,但需要仔细考虑;)。

根据您使用的语言,内置 URL 解析功能可能会有更好的选择。例如,在 PHP 中,这将是一种更简单的方法:

$domain = parse_url($urlStr, PHP_URL_HOST);
$isGoogle = preg_match('/^(?:www\.)?google\.[a-z.]+/', $domain);

或者(因为无论如何这并不完美,如上所述)你可以完全放弃正则表达式并像这样进行检查:

$isGoogle = strpos($domain, 'google.') !== false;
于 2012-10-24T23:25:39.507 回答