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

时间:2012-09-12 16:18:13

标签: java regex

正则表达式是我的弱点。

我正在寻找一个正则表达式或其他技术,允许我读取任意字符串并确定它是否是一个有效的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?

2 个答案:

答案 0 :(得分:5)

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

匹配

  • 行首<&lt; ^&gt;
  • 任意空格&lt; \ s *&gt;
  • 可选范围&lt;(公共|私人|受保护)?&gt;
  • 至少一个空格&lt; \ s +&gt;
  • 可选关键字static&lt;(静态)?&gt;
  • 至少一个空格&lt; \ s +&gt;
  • 一个java标识符(您希望它是一个类名或文字)&lt; \ w +&gt;
  • 至少一个空格&lt; \ s +&gt;
  • java标识符(函数名称)&lt; \ w +&gt;
  • 打开paren&lt;(&gt;
  • 任意参数(这里没有检查,因为大量混乱)&lt;。*?&gt;
    • 懒惰匹配
  • 关闭paren&lt;)&gt;
  • 任意空格&lt; \ s *&gt;
  • 行尾

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

答案 1 :(得分:3)

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

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

Java method declaration BNF

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

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