Java 使用正则表达式的组计数问题
编辑:原始代码中的RE是不相关的(或者它有任何意义)。假设您正在匹配Java 使用正则表达式的组计数问题,java,regex,Java,Regex,编辑:原始代码中的RE是不相关的(或者它有任何意义)。假设您正在匹配(X)|(Y):re中使用OR组合的两个模式。如何知道实际匹配的模式 我正试图提取括号内的文本,以填充RE 我面临的问题是,我无法找出匹配的实际组,因为组索引不是恒定的,因为OR 标记为XXXm.group()的行中的Ie返回整个模式 pat1 abcdef2 而m.group(1) pat null null de 和m.group(2) pat null null de 而m.groupCount()只是RE中的组
(X)|(Y)
:re中使用OR组合的两个模式。如何知道实际匹配的模式
我正试图提取括号内的文本,以填充RE
我面临的问题是,我无法找出匹配的实际组,因为组索引不是恒定的,因为OR
标记为XXXm.group()的行中的Ie返回整个模式
pat1
abcdef2
而m.group(1)
pat
null
null
de
和m.group(2)
pat
null
null
de
而m.groupCount()
只是RE中的组总数,因此它对于索引是无用的
我想要循环打印的是
pat
de
遗憾的是,java没有perl的m/运算符来提取内容并将其很好地放入数组中;-)
我不认为Java直接支持这一点
(Perl确实有一个漂亮的语法,在这里可以使用(?|([pat]+)1 | abc([de]+)f2)
,两个组都有相同的数字,这显然没有问题,因为只有一个或另一个。)
所以给你一个答案
我想要循环打印的是
pat
de
帕特
德
您必须自己检查组是否可用,因此此循环将为您提供所需的输出:
while (result) {
if (m.group(1)!= null) System.out.println(m.group(1));
if (m.group(2)!= null) System.out.println(m.group(2));
result = m.find();
}
我不太明白。您是否希望您的正则表达式为“(pat)1 | pat(ter)n2”?我相信,按照你的方式,它会返回字母pa和T的任何变化。例如,[pat]+会匹配“ppppt”、“atpaptap”等等。也许我错了。我对regex有点陌生。如果您的字符串是jjjpatssjpttattpppt1
和ksjdhfabcddddf2
您想要的输出是什么?按照您当前的表达式,匹配将成功,文本将分别为ptattpppt
和ddddddd
。我这样问是因为和这里的其他人一样,我认为您可能对表达式所指定的内容理解不足,并且可能正则表达式语法通常只有“pat”将与您提供的2个字符串匹配。+1,但我喜欢使用if(m.start(1)!-1)
,因为它不会在每次调用它时创建新的字符串对象。唉,似乎我别无选择,只能在重新处理后进行后处理;-)