Java 正则表达式错误 - 没有第 1 组

标签 java regex exception

我在我的项目中将其作为单元测试运行

public class RadioTest {

    private static Pattern tier;
    private static Pattern frequency;
    private static Pattern state;

    static {
        tier = Pattern.compile("Tier: \\d");
        frequency = Pattern.compile("Frequency: \\d{3}");
        state = Pattern.compile("State: (OFF|ON)");
    }

    @Test
    public void test() {
        String title = "Tier: 2";
        String title2 = "Frequency: 135";
        String title3 = "State: ON";

        assertTrue(tier.matcher(title).matches());
        assertTrue(frequency.matcher(title2).matches());
        assertTrue(state.matcher(title3).matches());

        Matcher m = tier.matcher(title);

        System.out.println(m.find());
        System.out.println(m.group(1));
    }

}

但是我得到一个错误 IndexOutOfBoundsException: No group 1 我知道这与 m.group(1) 有关,但有什么问题吗?在控制台中,我还从 m.find() 中看到了 true。我搜索了如何使用正则表达式,但它表明可以这样做。

最佳答案

Pattern.compile("Tier: \\d");

没有定义一个组所以这个表达式匹配但是你不能提取一个组。您可能希望这样做:

Pattern.compile("Tier: (\\d)");

还有你的其他表情。您需要 () 将要提取为组的部分括起来。

关于Java 正则表达式错误 - 没有第 1 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32281733/

相关文章:

java - 重置或清除 Lucene 索引

c# - 如何允许 URL 在 ASP.NET MVC5 中包含点?

java - 根据java中的模式拆分字符串 - 大写字母和数字

java - 如何在 Java JDBC 中处理异常?

c# - 路径之谜中的非法字符

java - 什么技术/方法用于动态编译 Java? [包括视频]

Java 枚举 : Instantiate Enum "dynamically" (more like a class constructor) to use with Jackson

java.lang.ClassCastException : java. lang.Integer 无法转换为 java.math.BigInteger HTTP 状态 500

php - 为什么 preg_replace with/(.*)/repeat part of string?

java - 使用 try-with-resources 悄悄关闭资源