不包含注释的私有或公共搜索方法的正则表达式

时间:2016-10-06 13:12:35

标签: regex regex-negation regex-lookarounds

我有很多代码,所以我想找一个正则表达式来查找我的代码在公共或私有之前的评论中没有工程师的所有地方,例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication7
{
    /// <summary>
    /// Blah blah
    /// </summary>
    /// engineer: blehbleh
    public class Class1
    {
        /// <summary>
        /// constructor
        /// </summary>
        /// engineer: mme
        public Class1()
        {

        }

        /// <summary>
        /// get data
        /// </summary>
        /// <param name="i">i param</param>
        /// <returns>o param</returns>
        public int GetData(int i)
        {
            return i;
        }
    }
}

在这种情况下,正则表达式应返回 public int GetData(int i),因为之前没有工程师。

有什么建议吗?当然它应该支持多行,记事本++或expresso正则表达式都可以。

1 个答案:

答案 0 :(得分:1)

您可以使用

^(?![ \t]*///[ \t]*engineer).*[\r\n]+\s*((?:public|private).*)

请参见regex demo

详细信息

  • ^-在文本编辑器中,一行的开头
  • (?![ \t]*///[ \t]*engineer)-不允许有0个或多个空格或制表符,后面紧跟///,0个或多个空格或制表符,然后在当前位置的右侧将engineer直接允许
  • .*[\r\n]+-具有行结束序列的行
  • \s*-超过0个空格
  • ((?:public|private).*)-第1组:publicprivate,然后是该行的其余部分。