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

为什么我要从正则表达式匹配器得到这些结果?

扈翰
2023-03-14

我有以下代码:

    String content = "title = 123";
    Pattern p = Pattern.compile("(title)");
    Matcher m = p.matcher(content);

    int i = 1;
    while (m.find()) {
        System.out.println("groupCount() = " + m.groupCount());
        System.out.println("i = " + i++ + "     found: " + m.group(0));
        System.out.println("i = " + i++ + "     found: " + m.group(1));
    }

输出为:

groupCount() = 1
i = 1   found: title
i = 2   found: title

有人能告诉我为什么我有1组计数,以及我在组(0)组(1)中是否得到了正确的值吗?

组(0)组(1)之间有什么区别吗?

共有3个答案

柳羽
2023-03-14

请参见匹配器规范:

groupCount()-返回此匹配器模式中的捕获组数。

您只有1个捕获组:(title)

group(0)是整个匹配(即与整个模式匹配的字符串),group(1)只是第一个编号的捕获组捕获的子字符串。在您的特定情况下,group(0)group(1)是相等的,因为您为整个模式设置了一个捕获组。因此,整个匹配(在组(0))和捕获的子串(在组(1))重合。

最佳实践是不要在整个模式中使用捕获组,因为您总是可以使用group(0)访问它。

孔鹤龄
2023-03-14

group 0是正在使用的整个字符串。因为您正在捕获所有内容,所以组0和组1(表示第一个捕获/匹配的组)将是相同的。如果您有这样的内容:

Pattern p=Pattern。编译(“(标题)=123”) 然后您将能够找到0组和1组之间的差异。

注意:group()group(0)

亢嘉茂
2023-03-14

文档中的种子:
groupCount()

按惯例,零组表示整个模式。它不包括在这个计数中。


组(int)

捕获组从左到右索引,从一开始。组0表示整个模式,因此表达式m.Group(0)等价于m.Group()。

所以group0就是要匹配的整个字符串。你有一个完整的字符串捕获组。所以从技术上讲,有2组。

0是默认值
1是您定义的

定义的组索引从1开始。

 类似资料:
  • 我不知道为什么这个正则表达式不匹配。也许你能发现错误。 ficontents: 我想匹配>>>>>>客户端9462<<<<<捕获该号码,以及此后的所有内容,直到另一个客户端号码。所以我的第一个捕获是“9462”,第二个捕获是“Had a program exception;please check the error log”。 它使用JavaScript设置在regex101.com中工作得很好

  • 正则表达式如何匹配出这个字符串'calc(100vh - 420px)'中的数字420

  • 问题内容: 我不明白为什么这个简单的正则表达式匹配不返回匹配对象。它返回None我在做什么错? 我完全是newby(昨天开始),想编写一个小程序来搜索文件夹树中的某些文件,打开这些文件并在这些文件中找到某些行,然后将这些行打印到一个新文件中。为了完成第一步,我想匹配os.walk返回的文件名,并使用某种模式进行匹配。因此,现在我正在检查正则表达式的工作方式,并且据我所知,以下代码应该匹配,但是当我

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

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

  • 我知道使用regex来解析html是不可取的,但这是我想先尝试的解决方案。 我正在努力匹配 以及这些单词之间的任何字符或空格 在以下字符串中: 我使用的正则表达式是: 我知道答案?在'is'阻止我的正则表达式与最后一个p标记中的'How is'匹配之前。但我不知道应该在开头放什么来阻止比赛从第一个p标签的“发生了什么”开始 我正在查看来自https://regex101.com/r/kZWYR7/