正则表达式提取Url中QueryString键值(搜索关键字的提取)

来源:互联网 发布:怎么样购买域名 编辑:程序博客网 时间:2024/04/29 15:20

起始:流量统计系统中衍生的小功能

目的:提取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();}



 

实际应用:

提取搜索引擎的搜索关键字。

应用代码

应用代码 /// <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;}


原文地址:http://www.cnblogs.com/ronli/archive/2010/02/02/RegexMatchQueryString.html