Регулярное выражение, которое будет соответствовать объявлению метода Java - PullRequest
17 голосов
/ 16 сентября 2008

Мне нужно регулярное выражение, которое будет соответствовать объявлению метода Java. Я придумал тот, который будет соответствовать объявлению метода, но он требует, чтобы открывающая скобка метода находилась в той же строке, что и объявление. Если у вас есть какие-либо предложения по улучшению моего регулярного выражения или просто есть лучшее, отправьте ответ.

Вот мое регулярное выражение: "\w+ +\w+ *\(.*\) *\{"

Для тех, кто не знает, как выглядит Java-метод, я приведу базовый:

int foo()
{

}

Есть несколько необязательных частей для методов java, которые также могут быть добавлены, но это единственные части, которые гарантированно имеют метод.

Обновление: Мой текущий Regex "\w+ +\w+ *\([^\)]*\) *\{", чтобы предотвратить ситуацию, описанную Майком и adkom.

Ответы [ 14 ]

0 голосов
/ 27 августа 2017
(public|private|static|protected) ([A-Za-z0-9<>.]+) ([A-Za-z0-9]+)\(

Также вот последовательность замены, которую вы можете использовать в IntelliJ

$1 $2 $3(

Я использую это так:

$1 $2 aaa$3(

при преобразовании файлов Java в Kotlin для предотвращения автоматического превращения функций, начинающихся с get, в переменные. Не работает с уровнем доступа «по умолчанию», но я сам этим не пользуюсь.

0 голосов
/ 25 марта 2016

Я нашел seba229 ответ полезным, он отражает большинство сценариев, но не следующие,

public <T> T name(final Class<T> x, final T y)

Это регулярное выражение также захватит это.

((public|private|protected|static|final|native|synchronized|abstract|transient)+\s)+[\$_\w\<\>\w\s\[\]]*\s+[\$_\w]+\([^\)]*\)?\s*

Надеюсь, это поможет.

0 голосов
/ 17 января 2014

Это для более конкретного случая использования, но гораздо проще, я думаю, его стоит поделиться. Я сделал это для нахождения методов «public static void», то есть для действий контроллера, и сделал это из командной строки Windows / Cygwin, используя grep; см .: https://stackoverflow.com/a/7167115/34806

cat Foobar.java | grep -Pzo '(?s)public static void.*?\)\s+{'

Последние две записи из моего вывода следующие:

public static void activeWorkEventStations (String type,
            String symbol,
            String section,
            String day,
            String priority,
            @As("yyyy-MM-dd") Date scheduleDepartureDate) {
public static void getActiveScheduleChangeLogs(String type,
            String symbol,
            String section,
            String day,
            String priority,
            @As("yyyy-MM-dd") Date scheduleDepartureDate) {
0 голосов
/ 26 июля 2012

Я создал регулярное выражение vim, чтобы сделать это для ctrlp / funky на основе ответа Георгиоса Гусиоса.

    let regex = '\v^\s+'                " preamble
    let regex .= '%(<\w+>\s+){0,3}'     " visibility, static, final
    let regex .= '%(\w|[<>[\]])+\s+'    " return type
    let regex .= '\w+\s*'               " method name
    let regex .= '\([^\)]*\)'           " method parameters
    let regex .= '%(\w|\s|\{)+$'        " postamble

Я думаю, что на Java это выглядит так:

^\s+(?:<\w+>\s+){0,3}(?:[\w\<\>\[\]])+\s+\w+\s*\([^\)]*\)(?:\w|\s|\{)+$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...