• [置顶] 正则表达式应用:分析查询字符串


         正则表达式作为一种分析技术,在很多地方都可以使用,最基础的可能人人都会。再此通过一系列简单的例子讲解正则表达式。

        给定一个地址如何分析需要的数据,例如如下的网址,分析各个查询字符串

          http://www.baidu.com/s?word=test&tn=sitehao123&ie=utf-8

        基本思路是,

    1先得到?后边的部分,

    2再根据&和=分割


      1先得到?后边的部分,

        匹配查询字符串的正则表达式:?(?<querystring>([^&]+&?)+),去掉命名部分的正则表达式为:?([^&]+&?)+ 匹配到'?word=test&tn=sitehao123&ie=utf-8

        ?([^&]+&?)+具体含义 :

              ?表示已 ?开头,由于?在正则表达式的中有特殊含义,所以需要一个斜杠 转义。

              [^&]+表示匹配不是&的任意一个或者多个字符

             &? 表示&出现一次或者不出现

          ?([^&]+&?)+的整体含义就是

             1匹配以?开头

              2 

                2.1匹配不是&的多个字符

                2.2匹配&一个或者没有

                2.3 重复2.1,2.2一次或者多次

            3 把(([^&]+&?)+)部分匹配到的字符命名为querystring则正则表达式变为:?(?<querystring>([^&]+&?)+)


    2再根据&和=分割

    分析查询字符串的正则表达式为:((?<key>[^&=]+)=(?<value>[^&=]+))+,去掉命名部分的正则表达式为:(([^&=]+)=([^&=]+))+

                 [^&=]+表示匹配不是&=的任意一个或者多个字符    

       (([^&=]+)=([^&=]+))+的整体含义就是

          1匹配不是&=的任意一个或者多个字符

           2匹配等号=

           3匹配不是&=的任意一个或者多个字符

          4重复以上1,2,3

        把1匹配到的字符命名为key,把3匹配到的字符命名为value,则正则表达式变为((?<key>[^&=]+)=(?<value>[^&=]+))+


    测试的代码如下:

      private static void Test() 
            {
                string url = "http://www.baidu.com/s?word=test&tn=sitehao123&ie=utf-8";
                  Regex reg = new Regex(@"?(?<querystring>([^&]+&?)+)");          
                  Match m =  reg.Match(url);
                  string querystring = m.Groups["querystring"].Value;
                  Regex reg2 = new Regex(@"((?<key>[^&=]+)=(?<value>[^&=]+))+");
                  Dictionary<string, string> querystringKeyValue = new Dictionary<string, string>();
                  foreach (Match item in reg2.Matches(querystring))
                {             
                  querystringKeyValue.Add(item.Groups["key"].Value, item.Groups["value"].Value);             
                }
            
            }


         

       


  • 相关阅读:
    linux上部署docker+tomcat服务,并部署项目
    docker使用Dockerfile把springboot项目jar包生成镜像并运行
    springboot配置log4j
    mysql常用函数
    java处理csv文件上传示例
    中国城市区号脚本-mysql
    java微信公众号支付示例
    java导出csv格式文件
    mysql时间相加函数DATE_ADD()
    centos分区
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3301820.html
Copyright © 2020-2023  润新知