当前位置: 首页 > 知识库问答 >
问题:

java正则表达式匹配为空

充培
2023-03-14

下面是在线测试:regex101

下面是java测试:

private void TestRegex() {

    ArrayList<String> strings = new ArrayList<>();
    strings.add("Every Witch Way 3x19 New Witch Order (2015)");
    strings.add("The Tonight Show Starring Jimmy Fallon Episode dated 22 January 2015 (2015)");
    strings.add("October Gale (2014)");
    strings.add("Kung Pow: Enter the Fist (2002)");

    Pattern pattern = Pattern.compile("^((?!.*(\\d*x\\d*|Episode dated)).*) \\((\\d*)\\)$");

    for (String s : strings) {

        Matcher matcher = pattern.matcher(s);
        while (matcher.find()) {

            Log.d("TAG1", s);
            for (int j=0; j<matcher.groupCount(); j++) {
                Log.d("TAG2", "Match " + j + ": " + matcher.group(j));
            }
        }
    }

}

下面是我测试的输出:

... D/TAG1﹕ October Gale (2014)
... D/TAG2﹕ Match 0: October Gale (2014)
... D/TAG2﹕ Match 1: October Gale
... D/TAG2﹕ Match 2: null
... D/TAG1﹕ Kung Pow: Enter the Fist (2002)
... D/TAG2﹕ Match 0: Kung Pow: Enter the Fist (2002)
... D/TAG2﹕ Match 1: Kung Pow: Enter the Fist
... D/TAG2﹕ Match 2: null

为什么匹配项2为空?在联机匹配器中,它对两者都正确匹配。

正则表达式字符串的说明:

共有1个答案

白坚壁
2023-03-14

问题主要是这个j 条件。您有三个组,但此条件只打印两个组,不包括组0。通过将 <转换为 <=也可以帮助您打印最后一组。

for (int j=0; j<=matcher.groupCount(); j++) {
                Log.d("TAG2", "Match " + j + ": " + matcher.group(j));

为什么匹配项2为空?

这是因为捕捉组存在于否定前瞻断言中。正如其他回答者所说,将捕获组转换为非捕获组不会产生一个额外组。

Group 0 = Prints the entire match
Group 1 = Prints the characters which are present inside the group index 1.
Group 2 = Prints the characters which are present inside group index 2. Likewise it goes on.

 类似资料:
  • 问题内容: 当字符串以数字开头时,我需要匹配,然后是一个点,然后是一个空格和1个或多个大写字符。匹配必须发生在字符串的开头。我有以下字符串。 我尝试过的正则表达式是: 它不匹配。一个有效的正则表达式将对这个问题有什么作用? 问题答案: (对不起,我先前的错误。大脑现在坚定地投入了。嗯,也许。) 这有效: 分解: =字符串开头 =一个或多个数字 (之所以转义,是因为它在字符串中,因此) =文字(或者

  • 问题内容: 我从以下格式的文件中获取输入: 现在,我想在我的Java代码中读取int1,int2,int3和int4。我该如何在Java中使用正则表达式匹配。谢谢。 问题答案: 为了避免空值:

  • 我们得到了一些这样的内容:

  • 问题内容: 用于正则表达式的Java API 声明将匹配空格。因此,正则表达式应匹配两个空格。 这样做的目的是用单个空格替换两个连续空格的所有实例。但是,这实际上不起作用。 我对正则表达式或“空白”一词有严重的误解吗? 问题答案: 是的,你需要获取matcher.replaceAll()的结果:

  • 有没有人试图描述与正则表达式匹配的正则表达式? 由于重复的关键字,这个主题几乎不可能在网上找到。 它可能在实际应用程序中不可用,因为支持正则表达式的语言通常具有解析它们的方法,我们可以将其用于验证,以及一种在代码中分隔正则表达式的方法,可用于搜索目的。 但是我仍然想知道匹配所有正则表达式的正则表达式是什么样子的。应该可以写一个。