猿问

正则表达式查找任何语言的所有方法调用

我需要一个正则表达式,它将匹配给定字符串中的所有方法调用。


示例输入和输出:


method1("key") // outputs method1


method1("key").method2("key") // outputs method1, method12


method1(method2.key()) // outputs method1, method2


我尝试了以下代码,


String line = "public String = method1(\"param\")";

private static Pattern methodCalls = Pattern.compile("[a-zA-Z]+\\([^\\)]*\\)(\\.[^\\)]*\\))?");


Matcher mc = methodCalls.matcher(line);

while (mc.find()) {

   System.out.println(mc.group(0)); // expected method1

}

它仅适用于类型method1("key")函数。


开心每一天1111
浏览 91回答 2
2回答

GCT1015

您不能同时提取和验证。道理很简单:方法调用包括dyck-languages,而dyck-languages不是正则的,因此你不能通过正则表达式来验证一些类似dyck的字符串。但是,如果您已经知道语法是正确的,则可以通过以下正则表达式提取所有方法名称:([^\W:.,()\s]+)\s*\(|::([^W:.,()\s]+)笔记:为了便于阅读,我包括了换行符。如果您将它们包含在您的正则表达式中,它将不起作用。请将正则表达式写成一行。如果要在 Java 中使用正则表达式,则需要对\es 进行转义)regex101 example Ideone example

FFIVE

此模式在您的问题中找到 3 个方法调用示例 - 只有 3 个示例private static Pattern methodCalls = Pattern.compile("\\w+[(](?:\"\\w+\"|\\w+\\.\\w+[(][)])[)](?:\\.\\w+[(]\"\\w+\"[)])?");
随时随地看视频慕课网APP

相关分类

Java
我要回答