Java 用于识别构造函数声明的Regexp
我正在处理的代码段需要能够识别Java源文件中没有args构造函数声明。虽然这些声明在语法上需要正确,但它们可能仍然分布在几行中,例如:Java 用于识别构造函数声明的Regexp,java,regex,Java,Regex,我正在处理的代码段需要能够识别Java源文件中没有args构造函数声明。虽然这些声明在语法上需要正确,但它们可能仍然分布在几行中,例如: public MyCons() 或 甚至 public MyCons ( ) 我对Java中的regexp非常陌生,所以我不知道如何让它工作。到目前为止,我尝试的是: public[\\s|\\n]*MyCons[\\s|\\n]*\\(\\S+\\) 但它似乎无法检测到涉及多个交替空格和换行符的情况,如上面的最后一个示例所
public MyCons()
或
甚至
public
MyCons
(
)
我对Java中的regexp非常陌生,所以我不知道如何让它工作。到目前为止,我尝试的是:
public[\\s|\\n]*MyCons[\\s|\\n]*\\(\\S+\\)
但它似乎无法检测到涉及多个交替空格和换行符的情况,如上面的最后一个示例所示。另外,如果我能用一个只接受一个单词的正则表达式替换MyCons,那就太好了(尽管这不是严格必要的)
如何解决这个问题?您需要使用反向引用,因为类名和构造函数名总是相同的
class\\s*([a-zA-Z\\d$]+).*?(public\\s+\\1\\s*\\(\\s*\\))
第2组
捕获所需的构造函数
匹配时需要使用
DOTALL
regex选项另一种识别代码的短方法:
s = s.replaceAll("\\s+", "");
s.equals("publicMyCons()");
不要过分复杂!
public\\s+MyCons\\s*\\(\\s*\\)
不起作用吗?我很确定语法应该是[\\s\\n]
或(\\s\\\\\n)
,而不是[\\s\\\\\\\\\\\\\\\(\\s*\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\。但是\\s*\\1
应该是\\s+\\1
,因为访问修饰符和类名之间必须有空格;)好极了,这就成功了,而且效果也很快!谢谢出于好奇,我如何修改这个表达式来识别带参数的构造函数??我试过用\(\\w+\)替换\(\\s*\),但似乎没有效果。@chrsva-用\([^)]*\\
替换\([^)]*\\
,所以完整的正则表达式是类\\s*([a-zA-Z\\d$]+).*(public\\s+\\1\\s*\\\([^)]*\
。这将在有参数或无参数的情况下工作。
s = s.replaceAll("\\s+", "");
s.equals("publicMyCons()");