我正在尝试从公式中提取函数名列表,但我的正则表达式无效。
鉴于( aaa(111) + bbb(222) ) / ccc ( 333 )
我需要获取包含aaa
,bbb
和ccc
的字符串数组。相反,我得到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));
}
答案 0 :(得分:2)
您的模式中有2个捕获组:
\\w+
由于你只对第二个感兴趣,你应该
matcher.group(2)
删除外部括号:
Pattern pattern = Pattern.compile("(\\w+)\\s*\\(");
请注意,matcher.group(0)
始终是整个模式的匹配(因此与您的外部括号相同)
答案 1 :(得分:0)
您已经拥有嵌套捕获组,使第一个成为非捕获组:
Pattern pattern = Pattern.compile("(?:(\\w+)\\s*\\()");
或Didier L所指出的只是删除外部组:
Pattern pattern = Pattern.compile("((\\w+)\\s*\\(");