Regex nie przechwytuje wszystkich grup
Za pomocąjava.util.regex
(jdk 1.6), wyrażenie regularne201210(\d{5,5})Test
stosowane do ciągu tematu20121000002Test
tylko przechwytujegroup(0)
i nie przechwytujegroup(1)
(wzór00002
) tak jak powinno, podając poniższy kod:
Pattern p1 = Pattern.compile("201210(\\d{5,5})Test");
Matcher m1 = p1.matcher("20121000002Test");
if(m1.find()){
for(int i = 1; i<m1.groupCount(); i++){
System.out.println("number = "+m1.group(i));
}
}
Co ciekawe, inne podobne wyrażenie regularne201210(\d{5,5})Test(\d{1,10})
stosowane do ciągu tematu20121000002Test0000000099
przechwytuje grupę 0 i 1, ale nie grupę 2.
Wręcz przeciwnie, używając obiektu RegExp JavaScript, dokładnie takie same wyrażenia regularne stosowane do tych samych ciągów obiektów przechwytują wszystkie grupy, jak można się było spodziewać. Sam sprawdziłem i ponownie sprawdziłem ten fakt, korzystając z tych testerów online:
http://www.regular-expressions.info/javascriptexample.htmlhttp://www.regextester.com/Czy robię tu coś złego? A może biblioteka regex Java jest do bani?