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;
    }
  • 相关阅读:
    【已解决】github中git push origin master出错:error: failed to push some refs to
    好记心不如烂笔头,ssh登录 The authenticity of host 192.168.0.xxx can't be established. 的问题
    THINKPHP 5.0目录结构
    thinkphp5.0入口文件
    thinkphp5.0 生命周期
    thinkphp5.0 架构
    Django template
    Django queryset
    Django model
    Python unittest
  • 原文地址:https://www.cnblogs.com/ronli/p/RegexMatchQueryString.html
Copyright © 2011-2022 走看看