我对 Regex 完全陌生,并且一直试图做到这一点,但收效甚微。
基本上我想要做的是创建一个匹配任何谷歌域的正则表达式,如 Google.com、Google.co.uk 等。
到目前为止,我有^http://www.google\.com/.*$
,但这仅与 Google.com 匹配。我如何修改它以允许任何扩展com
?
谢谢!
您可以使用替代,但是您必须提供所有您想要允许的 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;