要匹配C#中if语句的正则表达式模式

本文关键字:语句 正则表达式 模式 if | 更新日期: 2023-09-27 18:29:38

我使用以下正则表达式模式来匹配以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}

这是一个疯狂的长regex模式,但似乎在某种程度上起了作用。让我解释一下,它有三个命名的捕获组,即HeaderSectionCommentSectionunctionBody。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
  }
}

如果我使用上面的regex匹配它,它与第一个if声明不匹配,即;

if(Value1==Function(int Z)//This is a Comment.
{
Another function();
}

而是匹配内部的,即

  if(Value2==Value1)
  {
    Some code
  }

请指出我做错了什么,或者如果有其他不那么混乱的方法,请告诉我,或者如果regex模式在某个地方出错,请更正它。还有一件事,我在C#中使用正则表达式函数来完成这一切。提前谢谢。

要匹配C#中if语句的正则表达式模式

(?<header>if'(.*?)(?<comment>//.*?)*'s'n'{(?<functionbody>.*?)'n'}

如果paran以假定的方式格式化,这似乎是一个解决方案。

(?<header>if'(.*?)

将匹配if(,然后是//部分之前的任何内容,因此它将匹配

if(Value1==Function(int Z))

则它移动到(?<comment>//.*?)*'s,该CCD_4将匹配//符号之后的任何符号,但如果没有*等于零或更多出现,则也将匹配,并且's确保它不超过行末端。

则CCD_ 8匹配换行之后的任何CCD_。

在中

var x = 0
if(Value1==Function(int Z))//This is a Comment.
{
  if(Value2==Value1)
  {
    Some code
  }
}
var y = 0
if(y == x) 
{
    x = y + 1
}

它将匹配以下组:

header: if(Value1==Function(int Z))
comment: //This is a Comment.
functionbody: 
  if(Value2==Value1)
  {
    Some code
  }
header: if(y == x) 
functionbody: 
        x = y + 1