用于清理Google Alert URL的正则表达式

时间:2010-11-30 14:55:04

标签: php regex

正在寻找一个正则表达式来删除q =之前和之后的所有内容,并且包括& ct形成以下URL。

http://www.google.com/url?sa=X&q=http://www-possible-spam-link-com/foo-bar-foo-bar-foo-bar-foo-1-ea-from-foo.html&ct=ga&cad=:s7:f1:v0:d2:i2:lt:e0:p0:t1289126539:&cd=bar&usg=foo

2 个答案:

答案 0 :(得分:1)

>>> re.match(r'http://.*?q=([^&]*).*?', url).group(1)
'http://www.foo.com/bar-foo-bar-foo-bar-foo-bar-1-ea-from-foo.html'

如果它有任何转义实体,例如&,你也可能还需要对网址进行解码。或%20。这是依赖于语言的。

在PHP中

preg_match('/^http:\\/\\/.*?q=([^&]*)/', $url, $matches);
print($matches[1]);

答案 1 :(得分:1)

Marco,他不能使用反名(命名组)吗?

您可以为标准正则表达式方言中的组指定反向名称:http://www.regular-expressions.info/named.html

本节说:

  

Python的sub()函数允许你   将命名组引用为\ 1或\ g。   这在PHP中不起作用。在PHP中,你   可以使用双引号字符串   使用$ regs参数进行插值   你传递给   pcre_match():$暂存器[ '名称']

所以这是你原来的:

/ ^ HTTP:\ / \ / Q =([^&安培;])/

这可能有效:

/ ^ HTTP:\ / \ / Q =(\ G:[^&安培;])/

这有意义吗?