<[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\]>,把所有的一次全部取出来了。不正确!
<[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\]>,把所有的一次全部取出来了。不正确!
<[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]>
@"(?si)<\[MultiRecords>((?!<\[MultiRecords>).*?)<\/MultiRecords\]>"
string tmp;
foreach (Match match in Regex.Matches(NewsString, "(?i:src<\[MultiRecords>((.|\n)*) <\/MultiRecords\]>",RegexOptions.IgnoreCase))
{
tmp = match.Value;
//...
}
<[MultiRecords> qwewqqwewq<[MultiRecords> qwewq</MultiRecords]>
和
<[MultiRecords> qwewq
<[MultiRecords> qwewqqwewq<[MultiRecords> qwewq</MultiRecords]>
少了</MultiRecords]>
</MultiRecords]> ,你用非贪婪的,所有没有这两个。
"<[MultiRecords[^>]*>[^<>]*(((?'Open'<[MultiRecords[^>]*>)[^<>]*)+((?'-Open'</MultiRecords]>)[^<>]*)+)*(?(Open)(?!))</MultiRecords]>"
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]>
*/