0

我想比较方法定义,如:

1. static void main(String[] args){

2. static void main(String[] args)
{
3. int sum()
4. int abc(int a,int b){

我只有方法的名称,并且一次读取一行文件。

正则表达式不应比较方法调用,例如:

sum();
OBJ.abc(1,2);

我写了一个不工作的正则表达式:

$srcLine =~ m/$methodName[\([A-Z]*[a-z]*[0-9]*\s*[,]*\(*\)*\)]*/)

我在这一行遇到编译错误。

编辑

$srcLine =~ m/$methodName\((?!~)+\)/

这是另一个正则表达式,我将它与“methodName('除了 ~') 进行比较

4

1 回答 1

2

我不确定您的模式应该有多严格,但我可以向您解释正则表达式中的问题。

  1. $srcLine =~ m/$methodName[\([A-Z]*[a-z]*[0-9]*\s*[,]*\(*\)*\)]*/)

    使用方括号,您正在创建一个字符类,并且您不能混合使用它们。所以我假设你想要一个小组,所以

    $srcLine =~ m/$methodName(?:\([A-Z]*[a-z]*[0-9]*\s*[,]*\(*\)*\))*/)
    

    会更接近您的要求。我不确定这[,]*部分,这意味着匹配文字“,”0次或更多次,这可能不是你想要的。

  2. $srcLine =~ m/$methodName\((?!~)+\)/

    您不能重复零宽度断言((?!~)+部分)。如果您想说匹配某个字符以外的任何内容,请使用否定字符类。

    $srcLine =~ m/$methodName\([^~]+\)/
    

    请注意,这将匹配到最后找到的右括号。

于 2012-09-26T07:46:02.027 回答