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