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

The*_*per 2 c# regex

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

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

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

谢谢!

Mar*_*der 5

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

^http://www\.google\.(?:com|co\.uk|de|es)/.*$
Run Code Online (Sandbox Code Playgroud)

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

^http://www\.google\.[a-z.]+/.*$
Run Code Online (Sandbox Code Playgroud)

然而,这也会像http://www.google.myowndomain.com/.我认为没有任何方法只允许有效域名而不列出所有域名.

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

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

然后你可以再往前走一步并做出www.选择:

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

你看,匹配给定问题的所有可能但有效的URL并不是一件容易的事,但需要仔细考虑;).

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

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

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

$isGoogle = strpos($domain, 'google.') !== false;
Run Code Online (Sandbox Code Playgroud)