2013-05-20 15 views
6

ho trovato this filo e uno di utenti ha registrato la seguente riga di codice:Java Regex Metacaratteri

String[] digits2 = number.split("(?<=.)"); 

ho consultato un paio di FONTI come 1 e 2 -per decifrare ciò che significa questo codice, ma Non riesco a capirlo. Qualcuno può spiegare cosa significa l'argomento nel metodo split()?

Modifica: Per chiunque abbia la stessa domanda, come ho avuto, ecco un altro utile link

risposta

4

Questo è un positive lookbehind. L'espressione complessiva significa "dopo ogni personaggio, ma senza catturare nulla". In sostanza, se la stringa si presenta come

ABC 

poi le partite si verificherebbe a |, tra i personaggi.

A|B|C| 
+0

So che "." corrisponde a qualsiasi carattere tranne che per le interruzioni di riga, ma cosa significa "<=" in questo contesto? – Haque1

+1

@ Haque1 Questa è una sequenza di metacaratteri che indica l'espressione "." non dovrebbe * catturare * qualsiasi cosa. Il motore deve vedere che un personaggio è lì, ma non dovrebbe rimuovere quel personaggio dallo stream. – dasblinkenlight

+1

@ Haque1 Si tratta di un uso insolito di lookbehind. Un modo più comune è simile a questo: '(? <= Tag :)" [^ "] *" '. Questa espressione corrisponde a una stringa quotata solo quando è preceduta da una stringa' tag: ' – dasblinkenlight

1

.split("") (su una stringa/pattern vuoto) corrisponderà alla stringa vuota all'inizio della regex. Questo è un carattere di stringa vuota addizionale che è indesiderabile. (?<=.) è un'asserzione di larghezza zero (non consuma alcun carattere) che corrisponde allo spazio di larghezza zero seguito da qualsiasi carattere (seguito da perché è un lookbehind). Questo si divide sulla stringa vuota tra ogni carattere, ma non lo spazio vuoto tra il primo carattere e l'inizio della stringa.

+0

Lo spazio a larghezza zero è il termine sbagliato da usare qui, è [una cosa diversa] (http://en.wikipedia.org/wiki/Zero-width_space). – Cairnarvon

+0

@Cairnarvon grazie per aver segnalato questo ... quale termine preferiresti? –

+0

I voglio dire "confine del personaggio", ma non è nemmeno corretto. Non sono sicuro, ad essere onesti. – Cairnarvon