正则表达式捕获组会覆盖以前的匹配项

时间:2014-05-13 12:35:33

标签: c# .net regex regex-group

为什么正则表达式

class (?<class>\w+) (?<b>\{)(?:\s*(?<method>\w+)\(\)\{\})*\s*(?<-b>\})

应用于

class A { B(){} C(){} }

只返回

class: A
method: C

在我看来,它也应该与B匹配。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

如果您有重复的小组,则必须使用捕获。

Match m = Regex.Match("class A { B(){} C(){} }", @"class (?<class>\w+) (?<b>\{)(?:\s*(?<method>\w+)\(\)\{\})*\s*(?<-b>\})");
var methods = m.Groups["method"].Captures;
for (int i = 0; i < methods.Count; i++)
    Console.WriteLine(methods[i].Value);

输出:

B
C

C# Demo

此外:您不能将-b用作群组名称,将其更改为b_end或类似名称,否则您将无法捕获b-b群组。

class (?<class>\w+) (?<b_start>\{)(?:\s*(?<method>\w+)\(\)\{\})*\s*(?<b_end>\})

Regular expression visualization