zoukankan      html  css  js  c++  java
  • 正则表达式提取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;
    }
  • 相关阅读:
    Apache Tomcat开机后台启动
    android res文件夹下面的 values-v11 、 values-v14
    view.performClick()触发点击事件
    android Java BASE64编码和解码一:基础
    Android 正则表达式
    Android 中的Json解析工具fastjson 、序列化、反序列化
    Android 5中不同效果的Toast
    Android 中的编码与解码
    Android Http请求框架二:xUtils 框架网络请求
    Android-Universal-Image-Loader 框架使用
  • 原文地址:https://www.cnblogs.com/ronli/p/RegexMatchQueryString.html
Copyright © 2011-2022 走看看