2011-11-29 30 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:该死的讨厌的习惯逃避一切。纠正。 –