2011-10-13 18 views
7

Esiste un'espressione regolare che acquisirà tutte le istanze di un'espressione, indipendentemente dal fatto che si sovrappongano o meno?Restituzione di espressioni regolari sovrapposte

E.g. in /abc/def/ghi se voglio catturare tutte le stringhe che iniziano con /. Il regex (/.*) restituisce solo l'intera stringa, ma vorrei che corrisponda a /def/ghi e /ghi pure.

+0

argomento interessante. Per sicurezza, la corrispondenza con solo/abc', '/ def' e'/ghi' non è ciò che stai cercando, vero? – Arjan

+0

@Arjan no, non lo è. Sarebbe troppo facile! –

+1

trovo che '' fa il trucco, puoi anche [sovrapposizione risultati] [1] [1] (= (/.*)?): Http://stackoverflow.com/q/320448/ 653.295 – mousio

risposta

8

Certo, abbinare una stringa vuota e mettere un look-ahead dopo che cattura /.* in un gruppo di cattura:

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

sarebbe stampare:

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