我正在研究需要能够识别Java源文件中的无参数构造函数声明的代码段。虽然这些声明需要在语法上正确,但它们仍然可以分布在多行中,例如:
public MyCons()
或
public
MyCons()
甚至
public
MyCons
(
)
我对Java中的regexp很新,所以我不确定如何使用它。到目前为止我所尝试的是:
public[\\s|\\n]*MyCons[\\s|\\n]*\\(\\S+\\)
它似乎没有检测到涉及多个交替空格和换行符的情况,如上面的最后一个例子。另外,如果我能用一个只接受一个单词的正则表达式替换MyCons会很好(尽管这不是绝对必要的)。
我怎么解决这个问题?
答案 0 :(得分:2)
您需要使用反向引用,因为类名和构造函数名称始终相同..
class\\s*([a-zA-Z\\d$]+).*?(public\\s+\\1\\s*\\(\\s*\\))
Group 2
捕获所需的构造函数
匹配时需要使用DOTALL
正则表达式选项
答案 1 :(得分:0)
识别代码的另一种简短方法:
s = s.replaceAll("\\s+", "");
s.equals("publicMyCons()");