要开发Java Code Parser,我想将java源文件的方法内容提取为字符串。但问题是我无法通过获取{
和}
之间的值来匹配Regex中的内容,因为某些方法在方法中有{
和}
。像这样,
public String[] getArgs() {
try{
//something
}
catch(Exception e){
}
return args;
}
如果我使用正则表达式
Regex regex = new Regex("(?<={).*?(?=})");
它仅捕获try{ //something
如何忽略方法中{
和}
的出现,并获取方法中的值,如
try{
//something
}
catch(Exception e){
}
return args;
答案 0 :(得分: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);
<强> [编辑] 强> 对不起,我忘记了“RegexOptions.IgnorePatternWhitespace”
此示例正在写入控制台:
{d {E} F}
{I}
答案 1 :(得分:0)
如果您的代码不必使用任意输入,则可以利用输入文件中的编码约定来查找方法。例如,在大多数编码指南中,方法总是从一个新行开始,而右括号与左括号具有相同的缩进。
如果您的代码必须使用任意输入,则正则表达式是错误的工具。你需要一个Java解析器。