这里是 Java 8。我有以下功能:
public String extractArgs(String function) {
Pattern inRegex = Pattern.compile("in\\(.*\\)");
Matcher inMatch = inRegex.matcher(function);
log("num in(...) function matches: " + inMatch.groupCount() + "but does inMatch.matches()? " + inMatch.matches());
if(inMatch.groupCount() > 0) {
return inMatch.group(1);
} else {
return "";
}
}
当我经过它时"in(hello)"
作为参数,我得到以下输出:
num in(...) function matches: 0 but does inMatch.matches()? true
我的理解是如果 inMatch.matches()
返回true
(正在发生),我应该至少有一个匹配组( inMatch.groupCount > 0
)。
我试图将输入的参数字符串与正则表达式进行比较,并(如果存在匹配)获取“in(...)
函数”中包含的文本简介。因此,如果我调用extractArgs("in(hello)")
那么它应该返回字符串 "hello"
。我哪里出错了?!
最佳答案
原始正则表达式中没有捕获组。要引入捕获组(您想要的),您应该按照以下方式定义正则表达式:
in\\((.*)\\)
请注意,我在参数所在位置添加了一个 ()
括号。这样我就在 .*
周围创建了一个捕获组,因此您现在将拥有这些组:
pattern.matcher("in(hello, World!)").group(1) // hello, World!
关于regex - Java 8 Matcher 说有匹配项,但 groupCount 为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48871626/