2012-10-24 32 views
2

我是完全新的正則表達式,並一直試圖做到這一點,成功。正則表達式的谷歌推薦人驗證

基本上就是我想要做的是創建一個可以匹配任何谷歌域名例如Google.com,Google.co.uk等

到目前爲止,我有^http://www.google\.com/.*$一個正則表達式,但僅匹配谷歌。 COM。我如何修改它以允許除com之外的任何擴展名?

謝謝!

回答

5

你可以使用輪換,但你必須提供要允許所有頂級域名:

^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解析功能可能會有更好的選擇。在PHP的情況下,這將是一個更容易的方法:

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

或者(因爲這無論如何是不完美的,如上文所述),你可以完全放棄正則表達式,做這樣的檢查:

$isGoogle = strpos($domain, 'google.') !== false; 
+0

作品完美的男人。我用你的第二個解決方案列出所有的頂級域名太多了。我將承擔使用google.mydomain的風險。 非常感謝! – TheGateKeeper

+0

我被迫使用正則表達式,因爲我在IIS Url Rewrite模塊中使用它。 – TheGateKeeper

+1

@TheGateKeeper沒事,這很公平。無論如何,我會把它留在那裏,如果別人有不同的背景,也會遇到同樣的問題。 –