谷歌推荐人验证的正则表达式

时间:2012-10-24 23:22:11

标签: c# regex

我是Regex的新手,并且一直试图做到这一点,但收效甚微。

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

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

谢谢!

1 个答案:

答案 0 :(得分: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;