繁体   English   中英

正则表达式识别C#函数

[英]Regex to identify C# functions

我需要在VS解决方案中找到具有特定属性的所有函数,并在每个函数的结尾和开头插入一行代码。 为了识别功能,我已经尽可能

\[attribute\]\r?\n(.*)void(.*)\r?\n.*\{\r?\n([^\{\}]*)\}

但这仅适用于不包含用花括号分隔的任何其他代码块的函数。 如果我将最后一个捕获组设置为[\\s\\S] (所有字符),它将简单地选择从第一个函数的开头到最后一个函数的结尾的所有文本。 有没有办法解决这个问题,只选择一个完整的功能?

恐怕平衡构造本身并不足够,因为您可能在方法主体中拥有不平衡数量的构造。 您仍然可以尝试使用此正则表达式来处理大多数警告:

\[attribute\](?<signature>[^{]*)(?<body>(?:\{[^}]*\}|//.*\r?\n|"[^"]*"|[\S\s])*?\{(?:\{[^}]*\}|//.*\r?\n|"[^"]*"|[\S\s])*?)\}

参见RegexStorm上的演示

正则表达式将忽略字符串文字和// -之类的注释中的所有{} ,并占用{...}块。 它唯一不支持的是/*...*/多行注释。 如果您也需要考虑这些问题,请告诉我。

在此处输入图片说明

坏消息是您无法通过“搜索并替换”功能来执行此操作,因为该功能不支持平衡组。 您可以使用C#编写一个单独的程序来帮您。

获取匹配的右括号的构造为:

(?=\{)(?:(?<open>\{)|(?<-open>\})|[^\{\}])+?(?(open)(?!))

这与{...}块匹配。 但是正如@DmitryBychenko所提到的,它不尊重注释或字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM