Найдите самую длинную строку, начинающуюся с определенного слова(слов)

#regex

Вопрос:

В своем проекте я пытаюсь найти вхождения с самым длинным именем метода.

Например

 private function anyVeryLongMethodName($param ...);

public function anyEvenLongerMethodName()

protected function ...()
 

Я уже нашел что-то вроде

 ^.{100,}$
 

который не покажет точно самый длинный матч, но даст управляемый набор результатов при игре с подсчетом

К сожалению, он не рассматривает возможность начать с public/private/protected function

Есть ли подходящее регулярное выражение для этой работы?

Комментарии:

1. Вы не можете получить соответствие максимальной длины с помощью чистого регулярного выражения. Вам нужно получить все совпадения, а затем получить совпадение максимальной длины в вашем коде.

2. Как вы видите в вопросе, я уже знаю, что получить не тот, у которого максимальная длина, но получить набор результатов, например, длиной 100 , также нормально … предоставленный код уже делает это, но не учитывает конкретные слова в начале строки

3. Он соответствует любой функции, но набор результатов сейчас огромен … есть ли способ ограничить его минимальной длиной, как ^.{100,}$ это делается?

4. Похоже b(?:public|private|protected)s functions (.{100,})h*( , что это будет сделано удобным способом

5. именно то, чего я хочу … не могли бы вы написать ответ, который можно было бы принять?

Ответ №1:

Вы можете использовать это регулярное выражение для сопоставления имен функций, которым предшествуют определенные ключевые слова и длина которых составляет 100 или более:

 b(?:public|private|protected)s functions (w{100,})s*(
 

Демонстрация регулярных выражений

Сведения о регулярном выражении:

  • b : Граница слов
  • (?:public|private|protected) : Сопоставьте одно из 3 слов
  • s : Совпадение 1 пробелов
  • function : Совпадение текста function
  • s : Совпадение 1 пробелов
  • (w{100,}) : Сопоставьте 100 или более символов слов в группе захвата #1
  • s*( : Совпадение 0 пробелов, за которыми следует (