C# 要匹配方法内容的正则表达式

C# 要匹配方法内容的正则表达式,c#,regex,C#,Regex,为了开发Java代码解析器,我想将Java源文件的方法内容提取为字符串。但问题是,我无法通过获取{和}之间的值来匹配Regex中的内容,因为有些方法在方法内部有{和}。像这样, public String[] getArgs() { try{ //something } catch(Exception e){ } return args; } 如果我像这样使用正则表达式 Regex regex

为了开发Java代码解析器,我想将Java源文件的方法内容提取为字符串。但问题是,我无法通过获取
{
}
之间的值来匹配Regex中的内容,因为有些方法在方法内部有
{
}
。像这样,

   public String[] getArgs() {

       try{
          //something
       }
       catch(Exception e){

       }
     return args;
   }
如果我像这样使用正则表达式

Regex regex = new Regex("(?<={).*?(?=})");

如果代码不必处理任意输入,则可以利用输入文件中的编码约定来查找方法。例如,在大多数编码准则中,方法总是从新行开始,并且右大括号与右大括号具有相同的缩进


如果代码必须使用任意输入,则正则表达式是错误的工具。您需要一个Java解析器。

在类C文本上尝试以下正则表达式。 它将捕获每个方法体,并考虑嵌套的{}。 有关解释:

var reg=@”
(?
\{(?)
(?>
(?)\{
|
\}(?)  
|
(?(深度)[^\{}]*|)
)*
\}(?)
(?(深度)(?!)
)";
var input=“abc{d{e}f}gh{i}”;
foreach(在Regex.Matches(input,reg,RegexOptions.IgnorePatternWhitespace)中匹配m)Console.WriteLine(m.Groups[“body”].Value);
[编辑] 对不起,我忘了“RegexOptions.IgnorePatternWhitespace”

此示例正在写入控制台:

{d{e}f}


{i}

可能的@Austin副本:-您所指的副本需要解析器或库。但是我想要的是代码,为了让它工作,它首先需要删除类{}。在它起作用之后。Tnx。
try{
      //something
   }
   catch(Exception e){

   }
 return args;
var reg = @"
(?<body>
\{(?<DEPTH>)
(?>
(?<DEPTH>)\{
    |
\}(?<-DEPTH>)  
    |
(?(DEPTH)[^\{\}]* | )
)*
\}(?<-DEPTH>)
(?(DEPTH)(?!))
)";
        var input = "abc{d{e}f}gh{i}";
        foreach (Match m in Regex.Matches(input,reg, RegexOptions.IgnorePatternWhitespace)) Console.WriteLine(m.Groups["body"].Value);