регулярные выражения находят вызовы методов с определенным количеством аргументов - PullRequest
2 голосов
/ 16 марта 2011

Я пытаюсь найти все события определенного метода, но только с указанным количеством аргументов (5):

Допустим, у меня есть разные методы с одинаковым именем и разными наборами аргументов.

.method(asd,asd,asd,asd,asd,asd,asd)
.method(asd,asd,asd,asd,asd)
.method(asd,asd,asd)

Я пробовал что-то подобное: \.open\((?:.*?\,){4}[^,]*?\), но он возвращает все методы с 5 и более аргументами:

.method(asd,asd,asd,asd,asd,asd,asd)
.method(asd,asd,asd,asd,asd)

Мне нужны только те, у кого 4. Спасибо заранее!

Ответы [ 2 ]

2 голосов
/ 16 марта 2011

у меня работает:

egrep "\(([^,]*,){4}[^,]*\)"  method

Предложение от комментария:

egrep "open\s?\(([^,)]*,){4}[^,)]*\)"  methodfile
0 голосов
/ 16 марта 2011

Попробуйте что-то вроде этого:

\.method\(\w+(,\w+){3}\)

возвращает только те, которые имеют ровно 4 параметра. Вы можете учесть дополнительные пробелы:

\.method\s*\(\s*\w+(\s*,\s*\w+\s*){3}\)

EDIT

Поскольку вы отметили свой вопрос с помощью Eclipse, я предполагаю, что вы знакомы с Java. Следующее:

import java.util.regex.*;

class Test {
  public static void main(String[] args) {
    String text = ".method(asd,asd,asd,asd,asd,asd,asd) \n" +
        ".method(asd,asd,asd,asd)                       \n" +
        ".method(asd,asd,asd)                           \n" +
        "Foo.method(a,b,c,d)                            \n";

    Matcher m = Pattern.compile("\\.method\\(\\w+(,\\w+){3}\\)").matcher(text);

    while(m.find()) {
      System.out.println(m.group());
    }
  }
}

производит вывод:

.method(asd,asd,asd,asd)
.method(a,b,c,d)

как вы можете видеть на Ideone: http://ideone.com/RvTxw

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...