Sembra che tu abbia frainteso come funziona la definizione delle classi di caratteri in regex.
Per abbinare una delle stringhe 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, o 12, qualcosa come funziona:
0[1-9]|1[0-2]
Riferimenti
Spiegazione
Una classe di caratteri, da sola, tenta di trovare una corrispondenza con un solo carattere dalla stringa di input. [01-12]effettivamente definisce [012], una classe di caratteri che corrisponde un carattere dall'ingresso contro qualsiasi dei 3 caratteri 0, 1o 2.
La -definizione dell'intervallo va da 1a 1, che include solo 1. D'altra parte, una cosa del genere [1-9]comprende 1, 2, 3, 4, 5, 6, 7, 8, 9.
I principianti spesso commettono errori nel definire cose come [this|that]. Questo non "funziona". Questo definisce definizione del carattere [this|a], cioè partite di un carattere dall'ingresso contro una di 6 caratteri t, h, i, s, |o a. Più che probabile (this|that)è ciò che si intende.
Riferimenti
Come vengono definiti gli intervalli
Quindi è ovvio ora che uno schema come between [24-48] hoursnon "funziona". La classe di caratteri in questo caso è equivalente a [248].
Cioè, -in una definizione di classe di caratteri non definisce l'intervallo numerico nel modello. I motori Regex non "capiscono" i numeri nel pattern, ad eccezione della sintassi di ripetizione finita (ad esempio, a{3,5}corrispondenze tra 3 e 5 a).
La definizione dell'intervallo utilizza invece la codifica ASCII / Unicode dei caratteri per definire gli intervalli. Il carattere 0è codificato in ASCII come 48 decimale; 9è 57. Pertanto, la definizione del carattere [0-9]include tutti i caratteri i cui valori sono compresi tra 48 e 57 decimali nella codifica. Piuttosto sensibilmente, in base alla progettazione questi sono i personaggi 0, 1, ..., 9.
Guarda anche
Un altro esempio: dalla A alla Z
Diamo un'occhiata a un'altra definizione di classe di caratteri comune [a-zA-Z]
In ASCII:
A= 65, Z= 90
a= 97, z= 122
Ciò significa che:
[a-zA-Z]e [A-Za-z]sono equivalenti
- Nella maggior parte dei gusti,
[a-Z]è probabile che sia una gamma di caratteri illegale
- perché
a(97) è "maggiore di" di Z(90)
[A-z] è legale, ma include anche questi sei caratteri:
[(91), \(92), ](93), ^(94), _(95), `(96)
Domande correlate
[a-z0-9]corrisponde a tutte le lettere minuscole e tutte le cifre, ma solo come un singolo carattere.