2010-02-02 7 views
5

Ho bisogno di un modello regex per abbinare una sequenza di 3 cifre consecutive in una stringa che aumenta o diminuisce consecutivamente.Cosa è un modello Regex per 3 cifre consecutive crescente o decrescente

Ad esempio:

Queste stringhe devono corrispondere (xxx123xxx, 789xxxxxx, xxxxxx987, xxxxxx432)

Queste stringhe non deve corrispondere (xxxxxx454, 333xxxxxx, xxx429xxx)

+1

Perché il requisito per un regex? (Non penso che questo possa essere fatto con la maggior parte dei dialetti regex, le clausole condizionali di Perl potrebbero essere in grado di farlo). Meglio abbinare per tre cifre consecutive e quindi filtrare la relazione tra loro. – Richard

+3

"in aumento o in diminuzione" rende le espressioni regex non appropriate per questa attività –

+0

Questo è un problema che richiede "stato" in ogni punto. Considerare l'utilizzo di una macchina a stati (parser) per questo problema. – stusmith

risposta

8

Non c'è altro modo che elencandoli:

(012|123|234|345|456|567|678|789|987|876|765|654|543|432|321|210) 
+1

Questa è tecnicamente la risposta corretta, ma sono d'accordo sul fatto che Regex non è necessariamente il modo migliore per eseguire l'operazione. Il regex dovrebbe essere usato per trovare il modello a 3 cifre e quindi dovrebbero essere usati ulteriori test per scoprire se quel modello a 3 cifre aumenta o diminuisce consecutivamente. – user106776

+0

@ matt.kovacs: questa è una grande conclusione. – Gumbo

2

Questa sarà una regex molto complicata. In un progetto in cui dovevo fare qualcosa di molto simile, ho finito per abbinare gruppi di cifre e poi passare l'effettiva convalida delle cifre a un delegato (stavo facendo questo in codice C++, ho fatto qualcosa di simile su un altro progetto in Java in allo stesso modo).

Se possibile, questo è quello che consiglierei di fare qui. Una regex che potrebbe fare tutto da sola sarebbe molto difficile da leggere o mantenere.

3

Questo può essere fatto semplicemente, ma solo con la definizione dei gruppi validi di cifre consecutive

(:? 012 | 210 | 123 | 321 | 234 | 432 | 345 | 543 | 456 | 654 | 567 | 765 | 678 | 876 | 789 | 987)

Problemi correlati