我正在使用以下正则表达式模式来匹配以 C# 样式编写的 if 语句;
\b[if]{2}\b[ ]?\({1}(?<HeaderSection>[ \w\s\a\t\=\.\@\#\$\%\&a-zA-Z0-9\(\)\;\/\"\'\[\]\*]*)\){1}(?<CommentSection>[\s\a\w\t a-zA-Z0-9\/\.]*)[\r\n]*\{{1}(?<FunctionBody>[\r\n \a\s\wa-zA-Z0-9\(\)\"\.\;\:]*)[\r\n]*\}{1}
这是一个疯狂的长正则表达式模式,但似乎在某种程度上起作用。让我解释一下,它有三个命名的捕获组,即HeaderSection、CommentSection和FunctionBody。HeaderSection 捕获 if 语句的开始和结束括号之间的匹配,例如从语句以下;
if(Value1==Function(int Z))
它捕获;
Value1==Function(int Z)
类似地,CommentSection 在右括号后捕获注释(如果有),所以从下面的语句中;
if(Value1==Function(int Z))//This is a Comment.
它捕获
//This is a Comment.
并且 FunctionBody 捕获 { 和 } 之间的任何内容,例如在下面的代码中;
if(Value1==Function(int Z))//This is a Comment.
{
This is the
space for
function body.
}
它捕捉到“这是功能体的空间”。这就是正则表达式匹配的解释。现在的问题是,如果我有这样的功能;
if(Value1==Function(int Z)//This is a Comment.
{
if(Value2==Value1)
{
Some code
}
}
如果我使用上面的正则表达式匹配它,它与第一个 if 声明不匹配,即;
if(Value1==Function(int Z)//This is a Comment.
{
Another function();
}
而是匹配内部的,即
if(Value2==Value1)
{
Some code
}
请指出我做错了什么,或者如果有另一种不那么混乱的方法,请告诉我,或者如果某处错误,请纠正正则表达式模式。我正在使用正则表达式函数在 C# 中做这一切的另一件事。提前致谢。