正则表达式查找具有特定数量参数的方法调用

时间:2011-03-16 14:31:29

标签: javascript regex eclipse

我正在尝试查找某些方法的所有事件,但只能使用指定数量的参数(5):

所以让我说我有不同的方法,使用相同的名称和不同的args集。

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

我尝试过这样的事情:\.open\((?:.*?\,){4}[^,]*?\)但它会给所有方法带来5个或更多的args:

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

我只需要那些有4位的人。提前致谢!

2 个答案:

答案 0 :(得分:2)

适合我:

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

评论建议:

egrep "open\s?\(([^,)]*,){4}[^,)]*\)"  methodfile

答案 1 :(得分:0)

尝试这样的事情:

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

只返回恰好有4个参数的那些。您可能想要考虑可选的空格:

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

修改

由于您使用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

HTH