为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

开心每一天1111 2023-04-26 14:30:27
我需要一个正则表达式,它将匹配给定字符串中的所有方法调用。示例输入和输出: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


查看完整回答
反对 回复 2023-04-26
?
FFIVE

TA贡献1797条经验 获得超6个赞

此模式在您的问题中找到 3 个方法调用示例 - 只有 3 个示例

private static Pattern methodCalls = Pattern.compile("\\w+[(](?:\"\\w+\"|\\w+\\.\\w+[(][)])[)](?:\\.\\w+[(]\"\\w+\"[)])?");


查看完整回答
反对 回复 2023-04-26
  • 2 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信