正则表达式,以匹配任何合法的Java函数声明的格式

正则表达式是我的弱点。

我正在寻找一个正则表达式或其他技术,允许我读取任意字符串,并确定它是否是一个有效的java函数。

好:

public void foo() void foo() static protected List foo() static List foo() 

坏:

 public List myList = new List() 

码:

 For String line : lines. { If(line.matches("(public|protected|private)*(/w)*(") } 

是否有这样的正则表达式,如果它是一个有效的java函数将返回true?

 /^\s*(public|private|protected)?\s+(static)?\s+\w+\s+\w+\s*\(.*?\)\s*$/m 

火柴:

  • 行开始<^>
  • 任意空格<\ s *>
  • 可选范围<(public | private | protected)?>
  • 至少有一个空格<\ s +>
  • 可选关键字static <(静态)?>
  • 至少有一个空格<\ s +>
  • 一个java标识符(你应该希望它是一个类名或文字)<\ w +>
  • 至少有一个空格<\ s +>
  • java标识符(函数名称)<\ w +>
  • 打开paren <(>
  • 任意参数(这里没有检查,因为大量的混乱)<。*?>
    • 这是懒惰的匹配
  • 关闭paren <)>
  • 任意空格<\ s *>
  • 行结束

这是完整的FAR,但应该适合您的需求。

取决于你需要它的严谨性,因为它作为正则表达式会变得相当复杂。

Java中方法声明的语法如下所示:

Java方法声明BNF :

 method_declaration ::= { modifier } type identifier "(" [ parameter_list ] ")" { "[" "]" } ( statement_block | ";" ) 

并且您必须检查诸如具有多个修饰符但不重复相同的修饰符或多个范围修饰符之类的事情,其他类似的类型和标识符也不是Java关键字之一。 开始变得毛茸茸……我怀疑你是否想要编写自己的Java解析器。