110,549
社区成员
发帖
与我相关
我的任务
分享
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]>
*/
"<[MultiRecords[^>]*>[^<>]*(((?'Open'<[MultiRecords[^>]*>)[^<>]*)+((?'-Open'</MultiRecords]>)[^<>]*)+)*(?(Open)(?!))</MultiRecords]>"
string tmp;
foreach (Match match in Regex.Matches(NewsString, "(?i:src<\[MultiRecords>((.|\n)*) <\/MultiRecords\]>",RegexOptions.IgnoreCase))
{
tmp = match.Value;
//...
}
@"(?si)<\[MultiRecords>((?!<\[MultiRecords>).*?)<\/MultiRecords\]>"
@"(?s)<\[MultiRecords>(.*?)<\/MultiRecords\]>"