<[MultiRecords> qwewq
                <[MultiRecords>                 qwewqqwewq<[MultiRecords>                 qwewq</MultiRecords]>                </MultiRecords]>
                </MultiRecords]>
<[MultiRecords> qwewq
                <[MultiRecords>                 qwewqqwewq<[MultiRecords>                 qwewq</MultiRecords]>                </MultiRecords]>
                </MultiRecords]>
解析后的结果是1:<[MultiRecords> qwewq
                <[MultiRecords>                 qwewqqwewq<[MultiRecords>                 qwewq</MultiRecords]>                </MultiRecords]>
                </MultiRecords]>
2:<[MultiRecords> qwewq
                <[MultiRecords>                 qwewqqwewq<[MultiRecords>                 qwewq</MultiRecords]>                </MultiRecords]>
                </MultiRecords]>
我写的是<\[MultiRecords>((.|\n)*)<\/MultiRecords\]>,把所有的一次全部取出来了。不正确!

解决方案 »

  1.   

    @"(?s)<\[MultiRecords>(.*?)<\/MultiRecords\]>"
      

  2.   

    源字符串:
    <[MultiRecords> qwewq 
                    <[MultiRecords>                 qwewqqwewq <[MultiRecords>                 qwewq </MultiRecords]>                 </MultiRecords]> 
                    </MultiRecords]> 
    <[MultiRecords> qwewq 
                    <[MultiRecords>                 qwewqqwewq <[MultiRecords>                 qwewq </MultiRecords]>                 </MultiRecords]> 
                    </MultiRecords]> 
    想要的结果是:1. <[MultiRecords> qwewq 
                    <[MultiRecords>                 qwewqqwewq <[MultiRecords>                 qwewq </MultiRecords]>                 </MultiRecords]> 
                    </MultiRecords]> 
    2: <[MultiRecords> qwewq 
                    <[MultiRecords>                 qwewqqwewq <[MultiRecords>                 qwewq </MultiRecords]>                 </MultiRecords]> 
                    </MultiRecords]> 
      

  3.   

    如果要取最内层的:
    @"(?si)<\[MultiRecords>((?!<\[MultiRecords>).*?)<\/MultiRecords\]>"
      

  4.   

    非贪婪循环一次,可以一次取一个的
    string tmp;
     foreach (Match match in Regex.Matches(NewsString, "(?i:src<\[MultiRecords>((.|\n)*) <\/MultiRecords\]>",RegexOptions.IgnoreCase))
    {
                         tmp = match.Value;
    //...
    }
      

  5.   

    2楼的结果是:<[MultiRecords> qwewq
                    <[MultiRecords>                 qwewqqwewq<[MultiRecords>                 qwewq</MultiRecords]>

    <[MultiRecords> qwewq
                    <[MultiRecords>                 qwewqqwewq<[MultiRecords>                 qwewq</MultiRecords]>
    少了</MultiRecords]> 
                    </MultiRecords]> ,你用非贪婪的,所有没有这两个。
      

  6.   


    "<[MultiRecords[^>]*>[^<>]*(((?'Open'<[MultiRecords[^>]*>)[^<>]*)+((?'-Open'</MultiRecords]>)[^<>]*)+)*(?(Open)(?!))</MultiRecords]>"
      

  7.   

    using System; 
    using System.Text.RegularExpressions;class A

      static void Main()
      {
        string input = @"<[MultiRecords> qwewq 
                    <[MultiRecords>                 qwewqqwewq <[MultiRecords>                 qwewq </MultiRecords]>                 </MultiRecords]> 
                    </MultiRecords]> 
    <[MultiRecords> qwewq 
                    <[MultiRecords>                 qwewqqwewq <[MultiRecords>                 qwewq </MultiRecords]>                 </MultiRecords]> 
                    </MultiRecords]>";
        string pattern = @"(?six)
    <\[MultiRecords>   # 头
      (?>
        [^<>]+
        |
        <\[MultiRecords>(?<Depth>)
        |
        </MultiRecords\]>(?<-Depth>)
      )*
      (?(Depth)(?!))
    </MultiRecords\]>  # 尾  
    ";
        int i = 0;
        foreach (Match m in Regex.Matches(input, pattern))
        {
          Console.WriteLine("------ 第{0}个匹配 -------\n{1}\n", ++i, m);
        }
      }

    /* 程序输出:
    ------ 第1个匹配 -------
    <[MultiRecords> qwewq 
                    <[MultiRecords>                 qwewqqwewq <[MultiRecords>                 qwewq </MultiRecords]>                 </MultiRecords]> 
                    </MultiRecords]>------ 第2个匹配 -------
    <[MultiRecords> qwewq 
                    <[MultiRecords>                 qwewqqwewq <[MultiRecords>                 qwewq </MultiRecords]>                 </MultiRecords]> 
                    </MultiRecords]>
    */