正则表达式提取Url中QueryString键值(搜索关键字的提取)
起始:流量统计系统中衍生的小功能
目的:提取Url中Querystring指定键的值
BETA: (?<=key\=).*?(?=\&|$)
加强: (?<=(\&|\?|^)key\=).*?(?=\&|$)
示例代码:
示例代码
private const string _regexSEQuery = @"(?<=(\&|\?|^)({0})\=).*?(?=\&|$)";
/// <summary>
/// 查找关键字/// <remarks>更多访问http://www.cnblogs.com/ronli/</remarks>/// <param name="querykey">多个QueryKey按优先顺序用'|'分隔</param>
/// </summary>
private string RegexMatch(string input, string querykey, RegexOptions options)
{
return Regex.Match(input, string.Format(_regexSEQuery, querykey), options).Value.Trim();
}
/// <summary>
/// 复合查找关键字/// <remarks>更多访问http://www.cnblogs.com/ronli/</remarks>
/// <param name="querykey">多个QueryKey按优先顺序用'&'(连接)或'|'(短路)分隔</param>
/// </summary>
private string RegexMatches(string input, string querykey, RegexOptions options)
{
string value = "";
string[] orKeys = querykey.Split('|');
string[] andKeys;
foreach (string or in orKeys)
{
andKeys = or.Split('&');
foreach (string and in andKeys)
{
value += (RegexMatch(input, and, options) + " ");
}
if (value != "") break;
}
return value.Trim();
}
By Ron.li (http://www.cnblogs.com/ronli/)
实际应用:
提取搜索引擎的搜索关键字。
应用代码:
应用代码
/// <summary>
/// 复合查找关键字/// <summary>/// <remarks>更多访问http://www.cnblogs.com/ronli/</remarks>private string GetSEQuery(HttpContext context)
{
//搜索关键字
string query = "";
string queryStrings = context.Server.UrlDecode(context.Request.UrlReferrer.Query);
if (visit.RefDomain.Contains("bing"))
query = RegexMatch(queryStrings, "q", RegexOptions.IgnoreCase);
else if (visit.RefDomain.Contains("google"))
//q为空用oq代替
query = RegexMatches(queryStrings, "q|oq", RegexOptions.IgnoreCase);
//同时提取q和oq(空格连接)
//query = RegexMatches(queryStrings, "q&oq", RegexOptions.IgnoreCase);
//提取q,若为空用aq和oq代替
//query = RegexMatches(queryStrings, "q|aq&oq", RegexOptions.IgnoreCase);
else if (visit.RefDomain.Contains("baidu"))
query = RegexMatch(queryStrings, "wd", RegexOptions.IgnoreCase);
else if (visit.RefDomain.Contains("yahoo"))
query = RegexMatch(queryStrings, "p", RegexOptions.IgnoreCase);
else if (visit.RefDomain.Contains("sousou"))
query = RegexMatch(queryStrings, "w", RegexOptions.IgnoreCase);
else if (visit.RefDomain.Contains("ask"))
query = RegexMatch(queryStrings, "q", RegexOptions.IgnoreCase);
return query;
}
posted on 2010-02-02 12:05 Mr__BRIGHT 阅读(3707) 评论(0) 编辑 收藏 举报