【问题标题】:Regular Expression For Detecting Recursive Java Functions用于检测递归 Java 函数的正则表达式
【发布时间】:2013-11-26 23:32:47
【问题描述】:

我想知道什么是正则表达式,它可以检测任何函数声明,该声明的主体包含在 Java 中对其自身的调用。

匹配的方法示例:

public int method()

{*n

method();

}*n

感谢您的帮助。

【问题讨论】:

  • 您有什么特别的原因要使用正则表达式吗?
  • 要准确地做到这一点,您必须解析 Java 代码。正则表达式不足以解析 Java 代码。考虑方法重载......如何匹配参数类型以选择被调用的正确方法?如果该方法包含一个包含{} 字符的String 文字怎么办?只是一些简单的反例会破坏任何基于正则表达式的方法。
  • 要进行这种类型的静态分析,最好使用 ASM 之类的工具

标签: java regex parsing


【解决方案1】:

考虑以下代码示例:

public int method() {

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

public int method() {

// this method() is just an example

}

您现在知道您需要一个成熟的解析器吗?

【讨论】:

  • @Julian - 请确认你明白我的意思,所以我可以删除这个未回答的问题。
【解决方案2】:

我看不出如何使用正则表达式可靠地完成此操作,因为任何方法调用的参数都可能非常复杂,甚至包括包含类似命名方法的任何匿名类。

所以,答案是“不”;如果您希望它可靠,至少不会。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-26
      • 2012-08-16
      • 1970-01-01
      • 2012-07-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多