首页 > 解决方案 > 使用正则表达式在匹配之前查找第一次出现

问题描述

我试图弄清楚如何在找到匹配项之前匹配第一次出现的模式。给它一些背景:

我有一个 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...在存储过程名称之前第一次出现?

标签: regex

解决方案


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

推荐阅读