2011-10-13 32 views
7

¿Hay una expresión regular que capture todas las instancias de una expresión, independientemente de si se solapan o no?Devolución de expresiones regulares superpuestas

E.g. en /abc/def/ghi si quiero capturar todas las cadenas que comiencen con /. La expresión regular (/.*) solo devuelve la cadena completa, pero me gustaría que coincidiera en /def/ghi y /ghi también.

+0

tema interesante. Solo para estar seguro, emparejar simplemente '/ abc','/def' y '/ ghi' no es lo que estás buscando, ¿o sí? – Arjan

+0

@Arjan no, no lo es. ¡Eso sería demasiado fácil! –

+1

encuentro que '' hace el truco, consulta [partidos superposición] [1] [1] (= (/.*)?): Http://stackoverflow.com/q/320448/ 653295 – mousio

Respuesta

8

Claro, corresponderse con una cadena vacía y colocar una visión hacia adelante después de que captura /.* en un grupo de captura:

Matcher m = Pattern.compile("(?=(/.*))").matcher("/abc/def/ghi"); 
while(m.find()) { 
    System.out.println(m.group(1)); 
} 

imprimiría:

/abc/def/ghi 
/def/ghi 
/ghi