例子:1. http://blue/product/default.aspx?keyword=1&keyword=2&keyword3=32. http://blue/product/default---keyword--1-keyword2--2-keyword3--3.html要求:把1.转成2.,这里面路径和参数的个数是变化的。很难写出来,请大家尽量给我点帮助吧

解决方案 »

  1.   

    提示:主要工作就是把aspx文件名变成html,参数放进了文件名中,把? 转化成了---,=转化成了--,&转化成了-
      

  2.   

    Regex r = new Regex(@"\.aspx\?");
    string str = "http://blue/product/default.aspx?keyword=1&keyword=2&keyword3=3";
    str = r.Replace(str, "---").Replace('&', '-').Replace("=", "--")+".html";
      

  3.   

    using System.Text.RegularExpressions;
      

  4.   

    sorry,被你带沟里去了
    好像没必要用正则,用字符串替换就可以了哦
      

  5.   

    string str = "http://blue/product/default.aspx?keyword=1&keyword=2&keyword3=3";
    str = str.Replace(".aspx?", "---").Replace('&', '-').Replace("=", "--") + ".html";
      

  6.   

    给你们推荐个正则分析器 ,挺好用的
    RegexBuddy
      

  7.   

    1. http://blue/product/default.aspx?keyword=1&keyword=2&keyword3=3 2. http://blue/product/default---keyword--1-keyword2--2-keyword3--3.html 
    把1换成2那样呀,但是我这个正则是放在 配置文件中,程序只负责replace一次,所以要把逻辑都放到正则里,感觉有点难,都不知道能不能实现
      

  8.   

    Regex r = new Regex(@"\.aspx\?");
    string str = "http://blue/product/default.aspx?keyword=1&keyword=2&keyword3=3";
    str = r.Replace(str, "something");
    语句只能这样,处理都要靠正则
      

  9.   


    Regex r = new Regex(STRA); 
    string str = "http://blue/product/default.aspx?keyword=1&keyword=2&keyword3=3"; <---网址是变化的,参数个数是变化的
    str = r.Replace(str, STRB); 
    ^---语句是固定的
    Response.Write  str : http://blue/product/default---keyword--1-keyword2--2-keyword3--3.html  STRA=? STRB=?
      

  10.   


    using System;
    using System.Text.RegularExpressions;
    public class Test
    {
        const string strFormat = ".html";
        const string strTag1 = "---";//?
        const string strTag2 = "--";//=
        const string strTag3 = "-";//&    static void Main()
        {
            string strLink = "http://blue/product/default.aspx?keyword=1&keyword2=2&keyword3=3";
            string strBaseLink = strLink.Substring(0, strLink.IndexOf("."));
            strLink = strLink.Substring(strLink.IndexOf("?") + 1);
            string strParams = "";
            MatchCollection MCParams = Regex.Matches(strLink, @"(\w+)\=(\w+)(?#\w范围也许不够但是你可以自己加)");
            for (int i = 0; i < MCParams.Count; i++)
            {
                string strKey = MCParams[i].Groups[2].Value;
                if (i > 0)
                {
                    strParams += strTag3 + MCParams[i].Groups[1].Value + strTag2+strKey;
                }
                else
                {
                    strParams += strTag1 + MCParams[i].Groups[1].Value  +strTag2+ strKey;
                }
            }
            string strNewLink = strBaseLink + strParams + strFormat;        //http://blue/product/default---keyword--1-keyword2--2-keyword3--3.html
        }
    }
      

  11.   

    在程序中只要能用一个Replace,就能用多个吧,如果说不能,那就是你设计上的问题了
    写下面的代码有些哗众取宠,只是个人比较喜欢研究这方面的问题,所以才写了这样的代码,事实上个人还是不推荐这样的代码的            Regex r = new Regex(@"(\.aspx\?|&)([^&=]+)=([^&=]+)(?!$)|(\.aspx\?|&)([^&=]*)(=)([^&=]*)(?=$)", RegexOptions.IgnoreCase);
                //string str = "http://blue/product/default.aspx?keyword=1";                              //输出:http://blue/product/default---keyword--1.html
                string str = "http://blue/product/default.aspx?keyword=1&keyword2=2&keyword3=3";     //输出:http://blue/product/default---keyword--1-keyword2--2-keyword3--3.html
                str = r.Replace(str, delegate(Match m) { if (m.Groups[1].Value.ToLower() == ".aspx?") return "---" + m.Groups[2].Value + "--" + m.Groups[3].Value; if (m.Groups[6].Value.ToLower() == "=" && m.Groups[4].Value.ToLower() == "&") return "-" + m.Groups[5].Value + "--" + m.Groups[7].Value + ".html"; if (m.Groups[6].Value.ToLower() == "=" && m.Groups[4].Value.ToLower() == ".aspx?") return "---" + m.Groups[5].Value + "--" + m.Groups[7].Value + ".html"; return "-" + m.Groups[2].Value + "--" + m.Groups[3].Value; });