найти первое вхождение перед матчем с помощью регулярных выражений - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь выяснить, как сопоставить первое вхождение шаблона до того, как совпадение было найдено. Чтобы дать ему некоторый контекст:

У меня есть файл кода csharp, и у меня есть имя хранимой процедуры, я пытаюсь выяснить, если | можно сопоставить с помощью групп захвата имя метода, использующего эту хранимую процедуру.

например, с учетом файла кода ofllowing


        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 Ответ

1 голос
/ 27 марта 2020
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...