2011-07-28 24 views
23

Estoy tratando de capturar la parte correcta después de: usando java expr, pero en el siguiente código, el grupo de captura impreso es toda la cadena, ¿qué ocurre?grupo de captura java regex

String s ="xyz: 123a-45"; 
String patternStr="xyz:[ \\t]*([\\S ]+)"; 
Pattern p = Pattern.compile(patternStr); 
Matcher m = p.matcher(s); 
//System.err.println(s); 
if(m.find()){ 
    int count = m.groupCount(); 
    System.out.println("group count is "+count); 
    for(int i=0;i<count;i++){ 
     System.out.println(m.group(i)); 
    } 
} 

Respuesta

29

La numeración de los subgrupos comienza con 1, 0 es el texto completo. Solo dirígete hasta el recuento + 1 con tu ciclo.

+8

Más precisamente, cambie la condición de bucle 'for' a' i <= count'. –

1

Esto se debe a que los índices del grupo comienzan con 1. El grupo 0 es el patrón completo.

De JavaDoc: "Los grupos de captura están indexados de izquierda a derecha, comenzando en uno. El grupo cero denota el patrón completo, por lo que la expresión m.group (0) es equivalente a m.group()." Ver más here

+0

Creo que la confusión sobre esto se debe al hecho de que el documento ha confundido la "indexación" (siempre desde 0) con la "numeración" (del valor que desee). –

Cuestiones relacionadas