一段字符串如下
"uesr1":{
"li":{"name"="lili",***}
"li1":{"name"="lili",***}
}这段字符串又位于同样格式的大字符串中,我现在想正则 匹配出"uesr1":{***}这些内容。
内容中也有很多大括号。如何能够正确匹配对称的结尾。

解决方案 »

  1.   

    "uesr1":
    这里是固定的?否则如何匹分"uesr1"与"li"等情况
      

  2.   

    这个应该和解析html页面差不多,前面现在知道大括号组前面有个key,但key的内容中同样有包括大括号内容。等于是嵌套的大括号,如何找出对应的结尾
      

  3.   

    平衡组,不过你的需求不明确string test = @"a line
    ""uesr1"":{ 
    ""li"":{""name""=""lili"",***} 
    ""li1"":{""name""=""lili"",***} 

    another line.";
    MatchCollection mc = Regex.Matches(test, @"(?i)""uesr1"":\{(?>(?<o>)\{|(?<-o>)\}|[^{}])*(?(o)(?!))\}");
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Value + "\n";
    }
      

  4.   

    key指的是哪一部分
    "uesr1"
    还是
    "uesr1": 
    还是什么?根据动态输入的key取得嵌套的内容?
      

  5.   


    //textBox1.Text中就是那个key,注意Regex.Escape(key)不能少
    string test = @"a line
    ""uesr1"":{ 
    ""li"":{""name""=""lili"",***} 
    ""li1"":{""name""=""lili"",***} 

    another line.";
    Regex reg = new Regex(@"(?i)" + Regex.Escape(textBox1.Text) + @"\{(?>(?<o>)\{|(?<-o>)\}|[^{}])*(?(o)(?!))\}");
    MatchCollection mc = reg.Matches(test);
    foreach (Match m in mc)
    {
        richTextBox2.Text += m.Value + "\n";
    }
      

  6.   

    string test = @"a line
    ""uesr1"":{ 
    ""li"":{""name""=""lili"",***} 
    ""li1"":{""name""=""lili"",***} 

    another line.";            string s = myConfigString.TextFile2.ToString();            Regex reg = new Regex(@"(?i)" + Regex.Escape("\"uesr1\"") + @"{(?>(?<o>)\{|(?<-o>)\}|[^{}])*(?(o)(?!))}");
                MatchCollection mc = reg.Matches(test);
                foreach (Match m in mc)
                {
                    myDoShowMsg(m.Value + "\n");
                }
      

  7.   

    那个“:”哪去了//如果它是key里的一部分,那就放在key里
    [code=C#]Regex reg = new Regex(@"(?i)" + Regex.Escape("\"uesr1\":") + @"\{(?>(?<o>)\{|(?<-o>)\}|[^{}])*(?(o)(?!))\}");
    //如里它属于固定的匹配部分,那就放在后面
    Regex reg = new Regex(@"(?i)" + Regex.Escape("\"uesr1\"") + @":\{(?>(?<o>)\{|(?<-o>)\}|[^{}])*(?(o)(?!))\}");[/code]还有“{”和“}”在大多数情况下不转义也没关系,但最好还是进行转义处理
      

  8.   

    //如果它是key里的一部分,那就放在key里
    Regex reg = new Regex(@"(?i)" + Regex.Escape("\"uesr1\":") + @"\{(?>(?<o>)\{|(?<-o>)\}|[^{}])*(?(o)(?!))\}");
    //如里它属于固定的匹配部分,那就放在后面 
    Regex reg = new Regex(@"(?i)" + Regex.Escape("\"uesr1\"") + @":\{(?>(?<o>)\{|(?<-o>)\}|[^{}])*(?(o)(?!))\}");