Java 正则表达式:提取函数名称

Java regex: extract function names

我正在尝试从公式中提取函数名称列表,但我的正则表达式不起作用。

给定 ( aaa(111) + bbb(222) ) / ccc ( 333 ) 我需要获取包含 aaabbbccc 的字符串数组。相反,我得到 aaa(bbb(ccc (。如何进行这项工作?

这是我的尝试:

    String formula = "( aaa(111) + bbb(222) ) / ccc ( 333 )";
    Pattern pattern = Pattern.compile("((\w+)\s*\()");
    Matcher matcher = pattern.matcher(formula);

    while(matcher.find()){
        System.out.println(matcher.group(1));
    }

你有嵌套的捕获组,让第一个成为非捕获组:

Pattern pattern = Pattern.compile("(?:(\w+)\s*\()");

或者如 Didier L 所指出的,只需删除外部组:

Pattern pattern = Pattern.compile("((\w+)\s*\(");

您的模式中有 2 个捕获组:

  • 外括号
  • \w+
  • 身边的人

既然你只对第二个感兴趣,你应该

  • 拿第二组:matcher.group(2)
  • 去掉外括号:

    Pattern pattern = Pattern.compile("(\w+)\s*\(");
    

请注意 matcher.group(0) 始终是整个模式的匹配项(因此相当于此处的外部括号)