Dictionary<string, string> enumerator 里的数据是key="default.html" value="default.aspx"
key="about.html" value="default.aspx?name=about&amp;id=2"
key="about_(\d+).html" value="default.aspx?name=about&amp;id=$1"通常使用正则的做法是根据key值default.html得到value值default.aspx
根据key值about.html得到value值default.aspx?name=about&id=2
根据key值about_4.html得到value值default.aspx?name=about&id=4
...我想反过来
根据value值default.aspx得到key值default.html
根据value值default.aspx?name=about&id=2得到key值about.html
根据value值default.aspx?name=about&id=4得到key值about_4.html
...应该怎么做,求救!不知道我有没有说清楚,如果能给出正确答案者再增加50分

解决方案 »

  1.   

    把key 跟 value 的值也对调一下 不就可以了
      

  2.   


     System.Collections.ArrayList di=new System.Collections.ArrayList();
            di.Add("default.aspx");
            di.Add("default.aspx?name=about&id=2");
            di.Add("default.aspx?name=about&id=7");
            di.Add("default.aspx?name=about&id=8");
            System.Text.RegularExpressions.Regex re=new System.Text.RegularExpressions.Regex(@"name=([^&]*)&id=(\d)*");
            for (int i = 0;i<di.Count; i++)
            {
                string strv=di[i].ToString();
                System.Text.RegularExpressions.Match ma=re.Match(strv);
                if(ma.Success)
                {
                    if(ma.Groups[2].Value=="2")
                    {
                        Response.Write(di[i]+"的原型为"+ma.Groups[1].Value+".html<BR>");
                    }
                    else
                    {
                        Response.Write(di[i] + "的原型为" + ma.Groups[1].Value + "_" + ma.Groups[2].Value + ".html<BR>");
                    }
                }
                else
                {
                    Response.Write(di[i] + "的原型为default.aspx<BR>");
                }
            }default.aspx的原型为default.aspx
    default.aspx?name=about&id=2的原型为about.html
    default.aspx?name=about&id=7的原型为about_7.html
    default.aspx?name=about&id=8的原型为about_8.html
      

  3.   

    LZ要的应该是想实现URL重定向吧
    原来是输入 default.html 定向到 default.aspx
              about.html 定向到 default.aspx?name=about&amp;id=2
              about_3.html 定向到 default.aspx?name=about&amp;id=3
    Dictionary <string, string> enumerator 里的数据改为
    key="default.aspx" value="default.html" 
    key="default.aspx?name=about&amp;id=2" value="about.html" 
    key="default.aspx?name=about&amp;id=(\d+)" value="about_$1.html" 就可以输入 default.aspx --> default.html
              ……
      

  4.   

    因为我的Dictionary <string, string> enumerator 里的数据是变化的,不是固定的key="default.html" value="default.aspx" 
    key="about.html" value="default.aspx?name=about&amp;id=2" 
    key="about_(\d+).html" value="default.aspx?name=about&amp;id=$1" 
    key="test_(\d+).html" value="default.aspx?name=test&amp;id=$1" 
    key="news_(\d+)_(\d+).html" value="default.aspx?name=news&amp;id=$1&amp;class=$2" 
    key="bbs_(\d+)_(\d+)_(\w+).html" value="default.aspx?name=bbs&amp;id=$1&amp;class=$2&amp;bbs=$3" 
      

  5.   

    回 belldandy11 本来要实现的是URL重写,这部分功能已经实现了。  
    现在想再增加一个功能,在页面里面根据默认的url地址转到URL重写文件里的地址。例如<a href="$url("default.aspx")$">test1</a>
    <a href="$url("default.aspx?name=about&id=2")$">test2</a>
    <a href="$url("default.aspx?name=test&id=3")$">test3</a>
    <a href="$url("default.aspx?name=bbs&amp;id=100&class=2&bbs=test1")$">test4</a>不想写成死的,如,这也不是我想要的
    <a href="default.html">test1</a>实际打开页面的时候地址变成<a href="default.html">test1</a>
    <a href="about.html">test2</a>
    <a href="about_3.html">test3</a>
    <a href="bbs_100_2_test1.html">test3</a>
      

  6.   

    再构造一下Dictionary <string, string>。
    把原来的key,value交换存储
      

  7.   

    你需要是根据key值得到value值,你可以遍历一次Dictionary key值加一个判断就可以得到value值
      

  8.   

    做了个Demo,好像还可以。test("default.aspx?name=bbs&amp;id=12&amp;class=18&amp;bbs=abc"); 
    test("default.aspx?name=bbs&amp;id=12&amp;class=ret&amp;bbs=abc"); private string test(string strValue)
            {
                Dictionary<string, string> dic = new Dictionary<string, string>();
                dic.Add("default.html", "default.aspx");
                dic.Add("about.html", "default.aspx?name=about&amp;id=2");
                dic.Add("about_(\\d+).html", "default.aspx?name=about&amp;id=$1");
                dic.Add("test_(\\d+).html", "default.aspx?name=test&amp;id=$1");
                dic.Add("news_(\\d+)_(\\d+).html", "default.aspx?name=news&amp;id=$1&amp;class=$2");
                dic.Add("bbs_(\\d+)_(\\d+)_(\\w+).html", "default.aspx?name=bbs&amp;id=$1&amp;class=$2&amp;bbs=$3");
                string str;
                string tmp = Regex.Replace(strValue, "(?<=\\=).+?(?=&|$)", "", RegexOptions.IgnoreCase);
                MatchCollection mcValues = Regex.Matches(strValue, "(?<=\\=).+?(?=&|$)", RegexOptions.IgnoreCase);
                MatchCollection mc;
                MatchCollection mcKeys;
                string result = "";
                foreach (KeyValuePair<string, string> kvp in dic)
                {
                    str = Regex.Replace(kvp.Value, "(?<=\\=).+?(?=&|$)", "", RegexOptions.IgnoreCase);
                    if (tmp.CompareTo(str) == 0)
                    {
                        int keyIndex = 0;
                        int keyIndexOffset = 0;
                        bool isOk = true;
                        result = kvp.Key;
                        mcKeys = Regex.Matches(kvp.Key, "\\(.+?\\)", RegexOptions.IgnoreCase);
                        mc = Regex.Matches(kvp.Value, "(?<=\\=).+?(?=&|$)", RegexOptions.IgnoreCase);
                        for (int i = 0; i < mc.Count; i++)
                        {
                            if (mc[i].Value.StartsWith("$") && mcKeys.Count > keyIndex)
                            {
                                result = result.Insert(mcKeys[keyIndex].Index + keyIndexOffset, mcValues[i].Value);
                                if (!Regex.IsMatch(mcValues[i].Value, mcKeys[keyIndex].Value, RegexOptions.IgnoreCase))
                                {
                                    isOk = false;
                                    break;
                                }
                                keyIndexOffset += mcValues[i].Value.Length;
                                keyIndex++;
                            }
                            else if (mcValues[i].Value.CompareTo(mc[i].Value) != 0)
                            {
                                isOk = false;
                                break;
                            }
                        }
                        if (isOk)
                        {
                            result = Regex.Replace(result, "\\(.+?\\)", "", RegexOptions.IgnoreCase);
                            return result;
                        }
                       
                    }
                }
                return "";
            }