questo è il mio regex:più corrispondenze con delimitatore
([+-]*)(\\d+)\\s*([a-zA-Z]+)
- gruppo n ° 1 = firmare
- gruppo n ° 2 = moltiplicatore
- gruppo di unità n ° 3 = tempo
Il fatto è che vorrei corrispondere all'input dato ma può essere "incatenato". Quindi il mio input dovrebbe essere valido se e solo se l'intero pattern si ripete senza nulla tra queste occorrenze (eccetto gli spazi bianchi). (Solo una corrispondenza o più corrispondenze una accanto all'altra con possibili spazi bianchi tra di loro).
esempi validi:
1day
+1day
-1 day
+1day-1month
+1day +1month
+1day +1month
esempi validi:
metodo###+1day+1month
+1day###+1month
+1day+1month###
###+1day+1month###
###+1day+1month###
ho il mio caso posso usare matcher.find(), questo sarebbe fare il trucco, ma accetterà di ingresso in questo modo: +1day###+1month
che non è valido per me.
Qualche idea? Questo può essere risolto con più condizioni IF e più controlli per gli indici di inizio e fine, ma sto cercando una soluzione elegante.
EDIT
La regex suggerito nei commenti qui sotto ^\s*(([+-]*)(\d+)\s*([a-zA-Z]+)\s*)+$
sarà parzialmente il trucco, ma se lo uso nel seguente codice si restituisce risultato diverso da quello il risultato che sto cercando. Il problema è che non posso usare (*my regex*)+
perché corrisponderà al tutto.
La soluzione potrebbe essere quella di abbinare il tutto con ingresso ^\s*(([+-]*)(\d+)\s*([a-zA-Z]+)\s*)+$
e quindi utilizzare ([+-]*)(\\d+)\\s*([a-zA-Z]+)
con matcher.find()
e matcher.group(i)
per estrarre ogni partita e dei suoi gruppi. Ma stavo cercando una soluzione più elegante.
Thx, per risposta. Hai ragione, ma non l'ho descritto correttamente. Se il mio contributo è valido, devo estrarre per ogni partita il segno, il moltiplicatore e il valore dell'unità temporale. Con la tua soluzione restituirà '+ 1 giorno + 1 mese' come 1 una partita invece di due '+ 1 giorno' e '+ 1 mese' – user1610458
Puoi certamente effettuare il ciclo di tutti i gruppi nella partita. Se ciò non funziona bene per le tue esigenze, potrebbe essere più semplice chiamare semplicemente 'matcher.find' con'^\ s * ([+ -] *) (\ d +) \ s * ([a-zA-Z ] +) 'Più volte, passando ogni volta al successivo indice iniziale. –