Java正则表达式:提取函数名
我试图从公式中提取函数名列表,但我的正则表达式不起作用 给定Java正则表达式:提取函数名,java,regex,capturing-group,Java,Regex,Capturing Group,我试图从公式中提取函数名列表,但我的正则表达式不起作用 给定(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*\\()");
(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));
}
如果有嵌套的捕获组,请将第一个组设为非捕获组:
Pattern pattern = Pattern.compile("(?:(\\w+)\\s*\\()");
或者正如刚才所指出的,只需移除外部组:
Pattern pattern = Pattern.compile("((\\w+)\\s*\\(");
您的模式中有2个捕获组:
- 外圆括号
\\w+
- 第二组:
matcher.group(2)
- 删除外圆括号:
Pattern pattern = Pattern.compile("(\\w+)\\s*\\(");
请注意,
matcher.group(0)
始终是整个模式的匹配项(因此相当于此处的外括号)看起来您需要一个解析器。您尚未指定确切的规则,但正则表达式的功能通常不足以做到这一点。您应该从匹配项中选择group(2)