正则表达式匹配方法内容

Nip*_*una 5 c# regex

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

   public String[] getArgs() {

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

       }
     return args;
   }
Run Code Online (Sandbox Code Playgroud)

如果我使用正则表达式

Regex regex = new Regex("(?<={).*?(?=})");
Run Code Online (Sandbox Code Playgroud)

它只捕获 try{ //something

我怎么能忽略的出现次数{}内部方法,并得到里面像法值

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

   }
 return args;
Run Code Online (Sandbox Code Playgroud)

Oli*_*ier 2

对类似 C# 的文本尝试以下正则表达式。它将捕获每个方法主体,同时考虑嵌套的 {}。有关解释:http ://www.codeproject.com/KB/recipes/Nested_RegEx_explained.aspx

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);
Run Code Online (Sandbox Code Playgroud)

[编辑] 抱歉,我忘记了“RegexOptions.IgnorePatternWhitespace”

该示例正在写入控制台:

{d{e}f}

{我}