Vous semblez avoir mal compris comment la définition des classes de caractères fonctionne dans les regex.
Pour correspondre à l' une des chaînes 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, ou 12, quelque chose comme ça fonctionne:
0[1-9]|1[0-2]
Références
Explication
Une classe de caractères, par elle-même, tente de faire correspondre un et exactement un caractère de la chaîne d'entrée. [01-12]définit en fait [012], une classe de caractères qui correspond à un caractère de l'entrée contre l' un des 3 caractères 0, 1ou 2.
La -définition de la plage va de 1à 1, ce qui inclut juste 1. D'autre part, quelque chose comme [1-9]inclut 1, 2, 3, 4, 5, 6, 7, 8, 9.
Les débutants font souvent l'erreur de définir des choses comme [this|that]. Cela ne "fonctionne" pas. Cette définition caractère définit [this|a], à savoir qu'il correspond à un caractère de l'entrée contre l' un des 6 caractères t, h, i, s, |ou a. Ce (this|that)qui est prévu est plus que probable .
Références
Comment les plages sont définies
Il est donc évident maintenant qu'un modèle comme between [24-48] hoursne "fonctionne" pas. La classe de caractères dans ce cas est équivalente à [248].
Autrement dit, -dans une définition de classe de caractères, ne définit pas de plage numérique dans le modèle. Les moteurs Regex ne «comprennent» pas vraiment les nombres dans le modèle, à l'exception de la syntaxe de répétition finie (par exemple, les a{3,5}correspondances entre 3 et 5 a).
La définition de plage utilise à la place le codage ASCII / Unicode des caractères pour définir les plages. Le caractère 0est codé en ASCII en décimal 48; 9est 57. Ainsi, la définition de caractère [0-9]inclut tous les caractères dont les valeurs sont comprises entre la décimale 48 et 57 dans le codage. Plutôt sensiblement, par la conception ce sont les personnages 0, 1..., 9.
Voir également
Un autre exemple: de A à Z
Jetons un coup d'œil à une autre définition de classe de caractères commune [a-zA-Z]
En ASCII:
A= 65, Z= 90
a= 97, z= 122
Cela signifie que:
[a-zA-Z]et [A-Za-z]sont équivalents
- Dans la plupart des saveurs, il
[a-Z]s'agit probablement d'une plage de caractères illégale
- parce que
a(97) est "supérieur à" que Z(90)
[A-z] est légal, mais comprend également ces six caractères:
[(91), \(92), ](93), ^(94), _(95), `(96)
Questions connexes
[a-z0-9]correspond à toutes les lettres minuscules et à tous les chiffres, mais uniquement comme un seul caractère.