Você parece não ter entendido como a definição das classes de caracteres funciona no regex.
Para combinar com qualquer das cordas 01, 02, 03, 04, 05, 06, 07, 08, 09, 10,11 , ou 12, algo como isso funciona:
0[1-9]|1[0-2]
Referências
Explicação
Uma classe de caractere, por si só, tenta corresponder a um e exatamente um caractere da string de entrada. [01-12]realmente define [012], uma classe de caracteres que corresponde a um carácter de entrada contra qualquer um dos 3 caracteres 0, 1ou2 .
A -definição de intervalo vai de 1a 1, que inclui apenas 1. Por outro lado, algo como [1-9]inclui 1, 2, 3, 4, 5, 6, 7, 8,9 .
Iniciantes costumam cometer erros de definição de coisas como [this|that]. Isso não "funciona". Este personagem define definição [this|a], isto é, ele corresponde a um carácter de entrada contra qualquer de 6 caracteres de t, h, i, s, |ou a. Mais do que provável(this|that) é o que se pretende.
Referências
Como os intervalos são definidos
Portanto, é óbvio agora que um padrão como between [24-48] hoursnão "funciona". A classe de caracteres, neste caso, é equivalente a[248] .
Ou seja, -em uma definição de classe de caractere não define intervalo numérico no padrão. Os motores Regex não "entendem" realmente os números no padrão, com exceção da sintaxe de repetição finita (por exemplo, a{3,5}correspondências entre 3 e 5 a).
Em vez disso, a definição de intervalo usa a codificação ASCII / Unicode dos caracteres para definir intervalos. O caractere 0é codificado em ASCII como decimal 48; 9é 57. Assim, a definição de caractere [0-9]inclui todos os caracteres cujos valores estão entre o decimal 48 e 57 na codificação. Em vez de forma sensata, pelo projeto Estes são os personagens 0, 1, ..., 9.
Veja também
Outro exemplo: A a Z
Vamos dar uma olhada em outra definição de classe de personagem comum [a-zA-Z]
Em ASCII:
A= 65, Z= 90
a= 97, z= 122
Isso significa que:
[a-zA-Z]e [A-Za-z]são equivalentes
- Na maioria dos sabores,
[a-Z] é provável que seja um intervalo de caracteres ilegal
- porque
a(97) é "maior que" que Z(90)
[A-z] é legal, mas também inclui estes seis caracteres:
[(91), \(92), ](93), ^(94), _(95), `(96)
Perguntas relacionadas
[a-z0-9]o seguinte:, corresponde a todas as letras minúsculas e a todos os dígitos, mas apenas como um único caractere.