我有以下代码:
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)
之间有什么区别吗?
请参见匹配器规范:
groupCount()
-返回此匹配器模式中的捕获组数。
您只有1个捕获组:(title)
。
group(0)
是整个匹配(即与整个模式匹配的字符串),group(1)
只是第一个编号的捕获组捕获的子字符串。在您的特定情况下,group(0)
和group(1)
是相等的,因为您为整个模式设置了一个捕获组。因此,整个匹配(在组(0)
)和捕获的子串(在组(1)
)重合。
最佳实践是不要在整个模式中使用捕获组,因为您总是可以使用group(0)
访问它。
group 0
是正在使用的整个字符串。因为您正在捕获所有内容,所以组0和组1(表示第一个捕获/匹配的组)将是相同的。如果您有这样的内容:
Pattern p=Pattern。编译(“(标题)=123”)
然后您将能够找到0组和1组之间的差异。
注意:
group()
与group(0)
文档中的种子:
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/