要开发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)
对类似 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}
{我}