2013-11-26 24 views
0

我想知道什么是正则表达式,它将检测到任何函数声明,该函数声明的主体包含对Java本身的调用。方法的用于检测递归Java函数的正则表达式

例子将匹配:

public int method() 

{*n 

method(); 

}*n 

感谢您的任何帮助。

+3

为什么你想用正则表达式做这个有什么特别的理由吗? – hankd

+3

要准确执行此操作,您必须解析Java代码。正则表达式不足以解析Java代码。考虑方法重载......如何匹配参数类型来选择正在调用的正确方法?如果该方法包含一个包含“{”或“}”字符的“字符串”字面量,该怎么办?只是一些简单的反例会破坏任何基于正则表达式的方法。 –

+1

要做这种类型的静态分析,你最好使用像ASM –

回答

3

考虑下面的代码示例:

public int method() { 

System.out.prontln("method() started"); 
} 

public int method() { 

// this method() is just an example 

} 

你,现在你需要一个完全成熟的解析器看到了什么?

+0

@Julian这样的工具 - 请确认你已得到我的观点,所以我可以删除这个不回答。 –

1

我不明白这是如何可靠地使用正则表达式来完成的,因为任何方法调用的参数都可能是任意复杂的,甚至包括包含类似命名方法的匿名类。

所以,答案是“否”;至少不是如果你想要它是可靠的。

+2

's/be reliable/actual work /' –

0

这是一个快速而肮脏的例子。这会导致很多误报,并且通常会很慢。它没有考虑可能包含卷曲的大括号和字符串。但是,它适用于您的输入。 :-)

Matcher m = Pattern.compile("([\\w\\d_$]+\\s*\\([^)]*\\))[^{]*\\{.*\\1[^}]+}", Pattern.DOTALL |Pattern.MULTILINE).matcher(s1); 

System.out.println(m.matches());