regex - Java 8 Matcher 说有匹配项,但 groupCount 为 0

标签 regex java-8

这里是 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/

相关文章:

javascript - 正则表达式:检查数字的变化

java - 替换字符串中的笑脸代码

java - 字符串连接是否经过优化以使用现有的 StringBuilders?

java - 按对象数组列表分组而不创建映射

用于 url 验证的 PHP 正则表达式,filter_var 过于宽松

php - 从日期字符串中提取星期几

javascript - 忽略 HTML 标签以突出显示匹配的单词

java - 使用 java 8 stream api 做数组列表的深层复制但得到构建时间错误

javafx - 将颜色从 CSS 转换为 javafx 颜色对象

java - Glassfish 服务器不适用于 JDK 8