使用正则表达式查找匹配之前的第一个匹配项

时间:2020-03-27 07:25:43

标签: regex

我正在尝试找出如何在找到匹配项之前匹配模式的首次出现。 给它一些背景:

我有一个csharp代码文件,并且我有一个存储过程名称,我试图找出是否|。可以使用捕获组来匹配使用此存储过程的方法的名称。

例如,给出了以下代码文件


        public static public string GetUser(int user Id)
        {
            ....
            StoredProcedure sp = new StoredProcedure("Get_User");
            ....
        }

        public static int InsertUser(string sUitterTokenSecret, int nGroupID)
        {
            ....
            try
            {
                StoredProcedure sp = new StoredProcedure("SP_INSERT_USER");
                ....
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }

            return nInserted;
        }

        public static bool DeleteUser(int nSiteGuid, bool bLogOut = false)
        {
            ....
                StoredProcedure sp = new StoredProcedure("Delete_User");
            ...
        }

我正在尝试查找正在调用SP_INSERT_USER的方法的名称 所以我用这个 (public.*)(.|\n)*(SP_INSERT_USER)

但是问题是它的匹配会在public static public string GetUser(int user Id)之前一直..StoredProcedure("SP_INSERT_USER");出现第一次出现

如何获取存储过程名称之前的第一个public...

1 个答案:

答案 0 :(得分:1)

public.+?([A-Z].*)\((?:(?!public).|\n)*SP_INSERT_USER

比赛

public static int InsertUser(string sUitterTokenSecret, int nGroupID)
{
    ....
    try
    {
        StoredProcedure sp = new StoredProcedure("SP_INSERT_USER

并捕获第1组

InsertUser 

说明

  • public.+?-懒惰地匹配public的出现和所有内容
  • ([A-Z].*)\(-捕获大写字母的首次出现(方法开始)以及直到括号(的第一次出现之前的所有后续内容
  • (?:(?!public).|\n)*-非捕获组,匹配单词public
  • 之外的任何字符或换行
  • SP_INSERT_USER-匹配单词SP_INSERT_USER