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