c#调用webservice后,返回序列化后的字符串,如经过序列化后的字符串:
a:3:{i:0;a:3:{i:0;s:4:"dfdf";i:1;s:4:"dsfg";i:2;s:4:"gfgg";}i:1;a:3:{i:0;s:3:"jkj";i:1;s:2:"jj";i:2;s:3:"ffg";}i:2;a:3:{i:0;s:3:"sdd";i:1;s:5:"dfsdf";i:2;s:4:"gfgh";}}
,三次解析后,结果应该是这种形式, c=Array
(
    [0] => Array
        (
            [0] => dfdf
            [1] => dsfg
            [2] => gfgg
        )
请问各位专家、高手,如何实现将匹配的数组输出,我知道可以用正则表达式 ,怎么用?还有别的方法吗?

解决方案 »

  1.   

     大哥 你的这个字符串结构相当的清晰, 直接解析好了, 
    a:3:(3个ARRAY)
    {
    i:0;a:3:{i:0;s:4:"dfdf";i:1;s:4:"dsfg";i:2;s:4:"gfgg";} 
      i:1;a:3:{i:0;s:3:"jkj";i:1;s:2:"jj";i:2;s:3:"ffg";}
    i:2;a:3:{i:0;s:3:"sdd";i:1;s:5:"dfsdf";i:2;s:4:"gfgh";}

      

  2.   

    比如说:  string a=":{i:0;a:3:{i:0;s:4:\"dfdf\";i:1;s:4:\"dsfg\";i:2;s:4:\"gfgg\";}";
                while (a.IndexOf("\"")!=-1)
                {
                    a = a.Substring(a.IndexOf("\""));
                    
                    int i = a.IndexOf("\"",1);
                    string b = a.Substring(1, i - 1);
                    Console.WriteLine(b);//这就是想要的吧?
                    a = a.Substring(i+1);
                   
                }
      

  3.   

    继续请教!谢谢黑白关刀,还不是那样子。
    对于字符串a:3:{i:0;a:3:{i:0;s:4:"dfdf";i:1;s:4:"dsfg";i:2;s:4:"gfgg";}i:1;a:3:{i:0;s:3:"jkj";i:1;s:2:"jj";i:2;s:3:"ffg";}i:2;a:3:{i:0;s:3:"sdd";i:1;s:5:"dfsdf";i:2;s:4:"gfgh";}} 
    假设数组是Array[m][n],我要的结果是判断出数组的m,n值(分别为3,3),然后找到每一个""里的值,付到数组Array[3][3]里。
    最后得出Array
    (
        [0] => Array
            (
                [0] => dfdf
                [1] => dsfg
                [2] => gfgg
            )    [1] => Array
            (
                [0] => jkj
                [1] => jj
                [2] => ffg
            )    [2] => Array
            (
                [0] => sdd
                [1] => dfsdf
                [2] => gfgh
            ))
      

  4.   

    对于4楼,是控制台应用程序输出b,
    请问若想把b的值赋到一个文本框里,该怎么写?
    我用this.textbox.text=b;只得到了最后一个元素gfgg。
      

  5.   

    b + = a.Substring(1, i - 1);
      

  6.   

    我8楼的问题已解决。
    现在的问题是我如何获取到Array[m][n]这个数组的m、n值。
      

  7.   

    测试代码:            string a="a:3:{i:0;a:3:{i:0;s:4:\"dfdf\";i:1;s:4:\"dsfg\";i:2;s:4:\"gfgg\";}"
                    +"i:1;a:3:{i:0;s:3:\"jkj\";i:1;s:2:\"jj\";i:2;s:3:\"ffg\";}"
                    +"i:2;a:3:{i:0;s:3:\"sdd\";i:1;s:5:\"dfsdf\";i:2;s:4:\"gfgh\";}}";            string[] str1 = System.Text.RegularExpressions.Regex.Split(a.Substring(0,a.Length-3), ";}");
                
                Console.WriteLine(str1.Length);//这里就可以得出有几组数据。
                                              //如string[][] t = new string[3][];
             
                foreach (string i in str1)
                {
                    string tmp = "\"" + i;
                 
                    string[] str2 = System.Text.RegularExpressions.Regex.Split(tmp, "\"[^\"]*\"");
                    int l2 = str2.Length;                                       foreach (string j in str2)
                    {
                          Console.WriteLine(j);  //输出多了一个空字符串,你可以处理一下                 
                    }
                    
                }
      

  8.   

    谢谢各位,问题上周解决。
    我用的for循环
    并且还犯过错,就是没考虑到""之间还可能出现"的情况,还好解决了。 
      

  9.   

    看看正则表达式最简单的实现, 结合一下自己的FOR语句 对比一下啊, 看能不能改进一下
    http://book.csdn.net/bookfiles/801/10080124088.shtml