Ruby Regex:从谷歌网址中排除aclk

时间:2011-01-20 09:20:06

标签: ruby regex

我有两个网址(实际上更多是因为Google有地图,新闻,图片等) Google自然搜索:

http://www.google.nl/#hl=nl&biw=1920&bih=965&q=koffie&aq=f&aqi=g10&aql=&oq=&
fp=b8a3028139d33c34`

和Google Adwords搜索:

http://www.google.nl/aclk?sa=L&ai=CZYun1fI3TY_hO8aMOrer6aQCmK2m2AGIpdyCFr_g_-RVE
AEoCFDytZmR-_____8BYJGkmoWEGMgBAakCkm-p2E6Ttj6qBBlP0O_GI1GZU09CYDd728FmO_QIDea76u
yT&num=1&sig=AGiWqtzxvt17KyOWqEkwJ7jVdanxR645tw&
adurl=http://ad-emea.doubleclick.net/clk%3B233218340%3B57152064%3Bv

我需要正则表达式才能在网址中找到google并排除aclk?部分。这仅适用于Google Adwords。正则表达式将用于从主机引荐来源过滤,并仅查找Google Organic流量。

首先我尝试了这个正则表达式:

www[.]google[.].{1,}client=|www[.]google[.].{1,}gs_rfai|www[.]google[.].{1,}&
prmd|news[.]google[.].{1,}nwshp?| video[.]google|www[.]google[.].{1,} imghp?|
www[.]google[.].{1,}imgres|www[.]google[.].{1,}search

这抓住了50%的流量。当时我们没有运行Adwords,所以它可以捕获所有流量。但它没有。

我们希望抓住所有Google(有机)网址并排除Adwords网址(使用粉笔?)。

1 个答案:

答案 0 :(得分:2)

如果您需要将域名与URL的其余部分分开,请考虑使用URL解析器。 Ruby的标准库中有一个。

好的,这是一些代码:

require "uri"
uri ="http://www.google.nl/aclk?sa=L&ai=CZYun1fI3TY_hO8aMOrer6aQCmK2m2AGIpdyCFr_g_-RVEAEoCFDytZmR-_____8BYJGkmoWEGMgBAakCkm-p2E6Ttj6qBBlP0O_GI1GZU09CYDd728FmO_QIDea76uyT&num=1&sig=AGiWqtzxvt17KyOWqEkwJ7jVdanxR645tw&adurl=http://ad-emea.doubleclick.net/clk%3B233218340%3B57152064%3Bv"

puts URI.split(uri).inspect

给出

["http", nil, "www.google.nl", nil, nil, "/aclk", nil, "sa=L&ai=CZYun1fI3TY_hO8aMOrer6aQCmK2m2AGIpdyCFr_g_-RVEAEoCFDytZmR-_____8BYJGkmoWEGMgBAakCkm-p2E
d728FmO_QIDea76uyT&num=1&sig=AGiWqtzxvt17KyOWqEkwJ7jVdanxR645tw&adurl=http://ad-emea.doubleclick.net/clk%3B233218340%3B57152064%3Bv", nil]

您可能想要在长字符串上调用split(如果您需要参数,请使用“&”将它们拆分,然后使用“=”拆分这些内容)。对不起,如果我在这里不太精确,我并不完全理解你的问题。

URI的rdoc位于http://www.ruby-doc.org/stdlib/libdoc/uri/rdoc/。单击“URI”以查看主要文档。