Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于识别构造函数声明的Regexp_Java_Regex - Fatal编程技术网

Java 用于识别构造函数声明的Regexp

Java 用于识别构造函数声明的Regexp,java,regex,Java,Regex,我正在处理的代码段需要能够识别Java源文件中没有args构造函数声明。虽然这些声明在语法上需要正确,但它们可能仍然分布在几行中,例如: public MyCons() 或 甚至 public MyCons ( ) 我对Java中的regexp非常陌生,所以我不知道如何让它工作。到目前为止,我尝试的是: public[\\s|\\n]*MyCons[\\s|\\n]*\\(\\S+\\) 但它似乎无法检测到涉及多个交替空格和换行符的情况,如上面的最后一个示例所

我正在处理的代码段需要能够识别Java源文件中没有args构造函数声明。虽然这些声明在语法上需要正确,但它们可能仍然分布在几行中,例如:

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()");