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