2013-02-25 15 views
7

In che modo viene utilizzato l'operatore "uno o più" in regex per Java? Per esempio, io voglio corrispondere a questo:Corrispondenza modello Java Regex - Operatore "uno o più"

((a) (b) (c)) - corrisponde

((a)) - partite

dove a, b, c sono i caratteri o le cifre

La descrizione di base di questa espressione è set di parentesi all'interno di una serie di parentesi che contiene tutti i set separati da uno spazio bianco

+0

[Che cosa hai provato?] (Http://whathaveyoutried.com) –

+0

([(+).] +) <- ma questo non funziona – Aneem

+0

Ogni set ha solo un elemento o è ((a, b, c)) valido? –

risposta

11

si desidera qualcosa di simile \((\(\w*\))+\)

per renderlo più chiaro come funziona, espandere un po 'visivamente:

\( # outer bracket 
( # start of group 
\( # inner bracket 
\w* # 0 or more word characters ([0-9a-zA-Z_]) 
\) # inner bracket 
)  # end of group 
+  # and we do that group 1 or more times 
\) # outer bracket 

Spiegazione: se si applica * o + o? a qualcosa che era solo in parentesi (senza escape), quindi viene applicato all'intero contenuto delle parentesi anziché a un solo elemento.

Ogni volta che ho una domanda regex ho cercarlo nella http://www.regular-expressions.info/reference.html

+0

@Supericy Se ci sono spazi tra parentesi, aggiungi anche spazi nella regex (o '\ s *' se vuoi essere generico sulla quantità di spazi) – Patashu

+1

@Aneem in Java devi usare due backslashes \\ per passarlo a regex engine come una backslash \ poiché è anche un carattere speciale in String. – Pshemo

+1

@Aneem: Java usa i backslash per sfuggire ai caratteri speciali come '\ t' e' \ n' nelle sue stringhe - il che significa che le barre retroverse svaniscono nel momento in cui il parser delle espressioni regolari le vede. Per evitare ciò, devi raddoppiare il conteggio del backslash. – Patashu

Problemi correlati