Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式的组计数问题_Java_Regex - Fatal编程技术网

Java 使用正则表达式的组计数问题

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中的组

编辑:原始代码中的RE是不相关的(或者它有任何意义)。假设您正在匹配
(X)|(Y)
:re中使用OR组合的两个模式。如何知道实际匹配的模式

我正试图提取括号内的文本,以填充RE

我面临的问题是,我无法找出匹配的实际组,因为组索引不是恒定的,因为OR

标记为XXX
m.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)
,因为它不会在每次调用它时创建新的字符串对象。唉,似乎我别无选择,只能在重新处理后进行后处理;-)