我想知道什么是正则表达式,它将检测到任何函数声明,该函数声明的主体包含对Java本身的调用。方法的用于检测递归Java函数的正则表达式
例子将匹配:
public int method()
{*n
method();
}*n
感谢您的任何帮助。
我想知道什么是正则表达式,它将检测到任何函数声明,该函数声明的主体包含对Java本身的调用。方法的用于检测递归Java函数的正则表达式
例子将匹配:
public int method()
{*n
method();
}*n
感谢您的任何帮助。
考虑下面的代码示例:
public int method() {
System.out.prontln("method() started");
}
或
public int method() {
// this method() is just an example
}
你,现在你需要一个完全成熟的解析器看到了什么?
@Julian这样的工具 - 请确认你已得到我的观点,所以我可以删除这个不回答。 –
我不明白这是如何可靠地使用正则表达式来完成的,因为任何方法调用的参数都可能是任意复杂的,甚至包括包含类似命名方法的匿名类。
所以,答案是“否”;至少不是如果你想要它是可靠的。
's/be reliable/actual work /' –
这是一个快速而肮脏的例子。这会导致很多误报,并且通常会很慢。它没有考虑可能包含卷曲的大括号和字符串。但是,它适用于您的输入。 :-)
Matcher m = Pattern.compile("([\\w\\d_$]+\\s*\\([^)]*\\))[^{]*\\{.*\\1[^}]+}", Pattern.DOTALL |Pattern.MULTILINE).matcher(s1);
System.out.println(m.matches());
为什么你想用正则表达式做这个有什么特别的理由吗? – hankd
要准确执行此操作,您必须解析Java代码。正则表达式不足以解析Java代码。考虑方法重载......如何匹配参数类型来选择正在调用的正确方法?如果该方法包含一个包含“{”或“}”字符的“字符串”字面量,该怎么办?只是一些简单的反例会破坏任何基于正则表达式的方法。 –
要做这种类型的静态分析,你最好使用像ASM –