#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 или более символов слов в группе захвата #1s*(
: Совпадение 0 пробелов, за которыми следует(