我需要一个正则表达式,它将匹配给定字符串中的所有方法调用。示例输入和输出:method1("key") // outputs method1method1("key").method2("key") // outputs method1, method12method1(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")函数。
2 回答
GCT1015
TA贡献1827条经验 获得超4个赞
您不能同时提取和验证。道理很简单:方法调用包括dyck-languages,而dyck-languages不是正则的,因此你不能通过正则表达式来验证一些类似dyck的字符串。
但是,如果您已经知道语法是正确的,则可以通过以下正则表达式提取所有方法名称:
([^\W:.,()\s]+)\s*\(|::([^W:.,()\s]+)
笔记:
为了便于阅读,我包括了换行符。如果您将它们包含在您的正则表达式中,它将不起作用。请将正则表达式写成一行。
如果要在 Java 中使用正则表达式,则需要对
\
es 进行转义)
regex101 example Ideone example
FFIVE
TA贡献1797条经验 获得超6个赞
此模式在您的问题中找到 3 个方法调用示例 - 只有 3 个示例
private static Pattern methodCalls = Pattern.compile("\\w+[(](?:\"\\w+\"|\\w+\\.\\w+[(][)])[)](?:\\.\\w+[(]\"\\w+\"[)])?");
添加回答
举报
0/150
提交
取消