2011-11-29 29 views
1

對不起,我是一個正則表達式新手。用於匹配完整子串的正則表達式

我想這些比賽:

MATCH!  http://www.google.com/search?q=... 
NO MATCH http://www.googledummy.com/search?q=... 
MATCH!  http://www.google.it/search?q=... 
NO MATCH! http://www.google.it/ 
NO MATCH! http://www.google.it/foobar 
MATCH!  google.it/search?q=...  
MATCH!  google.xxxxx/search?q=... 

如果我正則表達式是這樣的?

google.[*$]/search 

回答

1

你可能想是這樣的:

^(?:https?://)?(?:[^.\s]+\.)*google(\.\w+){1,2}/search\?q= 

此正則表達式可以:

  • ^ - 從一開始就進行匹配 - 不允許部分匹配域名。
  • (?:https?://)? - http或https協議。
  • (?:[^.]+\.)* - 子域,但不包含其他字符:hello.google.com是可以的。
  • 谷歌

不允許:

  • http://notgoogle.com/search?q=
  • http://example.com?google.com/search?q=

問題:

  • (\.\w+){1,2} - 允許google.co.il,但也google.hackers.com。這是有問題的,除非你想白名單所有的兩個字的tlds。
  • q查詢參數可能不是第一個(雖然也許這是要求之一)。
  • \w可能不適合在頂級域名是有效的(雖然谷歌也不太可能買google.קום

示例中的所有字符:http://rubular.com/r/Avd5RFs3oH

結論 - 如果在所有適用的,使用URL解析器:)

0

從你寫的是什麼,我會說

google\.[a-z]+\/search 

是否應該使用search之前\/或只是/取決於你所使用的語言。

由於SeRPRo這不適合google.co.uk工作,使之與它的工作,你可以使用:

google\.[a-z]+(?:\.[a-z])?\/search 

(有需要第三級任何一個國家?)

+1

that one does not work with google.co.uk/search – SERPRO

+0

不可否認,這不是所給的例子,所以也許沒有必要。 – Joey

+1

我認爲.xxxx它是任何域的一個明顯例子...... :) – SERPRO

0

這其中的工作原理:

google\.[a-zA-Z\.]+/(search\W.+) 

Example

+0

這也將允許域名 –

+0

中的任意字符(例如&*^$%)足夠公平,儘管這是一個奇怪的情況,我將編輯爲僅匹配字母點。 – SERPRO

+0

他們只問一個正則表達式,而不是如何編寫和逃避某種特定語言的正則表達式,所以我想分隔符是不必要的,除非你正在處理PHP或Perl ... – Joey

0

您可能希望在後續荷蘭國際集團:

google\.[a-zA-Z.]+/search

兩個其他的答案應該可以正常工作,直到你遇到一個二級谷歌的網站,如google.com.ua

+0

@Joey:該死的討厭的習慣逃避一切。糾正。 –