Parece haber entendido mal cómo funciona la definición de clases de caracteres en expresiones regulares.
Para que coincida con cualquiera de las cadenas 01
, 02
, 03
, 04
, 05
, 06
, 07
, 08
, 09
, 10
, 11
, o 12
, algo así como funciona esto:
0[1-9]|1[0-2]
Referencias
Explicación
Una clase de caracteres, por sí misma, intenta hacer coincidir uno y exactamente un carácter de la cadena de entrada. [01-12]
en realidad define [012]
, una clase de caracteres que coincide con un carácter de la entrada en contra de cualquiera de los 3 personajes 0
, 1
o 2
.
La -
definición de rango va de 1
a 1
, que incluye solo 1
. Por otro lado, algo así como [1-9]
incluye 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
.
Los principiantes suelen cometer errores al definir cosas como [this|that]
. Esto no "funciona". Este carácter define definición [this|a]
, es decir, coincide con un carácter de la entrada contra cualquiera de 6 caracteres t
, h
, i
, s
, |
o a
. Más que probable (this|that)
es lo que se pretende.
Referencias
Cómo se definen los rangos
Entonces es obvio ahora que un patrón como between [24-48] hours
no "funciona". La clase de carácter en este caso es equivalente a [248]
.
Es decir, -
en una clase de caracteres, la definición no define un rango numérico en el patrón. Los motores de expresiones regulares no "comprenden" realmente los números en el patrón, con la excepción de la sintaxis de repetición finita (por ejemplo, a{3,5}
coincidencias entre 3 y 5 a
).
En su lugar, la definición de rango utiliza codificación ASCII / Unicode de los caracteres para definir rangos. El carácter 0
está codificado en ASCII como decimal 48; 9
es 57. Por lo tanto, la definición de carácter [0-9]
incluye todos los caracteres cuyos valores están entre el decimal 48 y 57 en la codificación. En vez con sensatez, por diseño Estos son los personajes 0
, 1
, ..., 9
.
Ver también
Otro ejemplo: de la A a la Z
Echemos un vistazo a otra definición de clase de carácter común [a-zA-Z]
En ASCII:
A
= 65, Z
= 90
a
= 97, z
= 122
Esto significa que:
[a-zA-Z]
y [A-Za-z]
son equivalentes
- En la mayoría de los sabores,
[a-Z]
es probable que sea un rango de caracteres ilegal.
- porque
a
(97) es "mayor que" que Z
(90)
[A-z]
es legal, pero también incluye estos seis caracteres:
[
(91), \
(92), ]
(93), ^
(94), _
(95), `
(96)
Preguntas relacionadas
[a-z0-9]
esto coincide con todas las letras minúsculas y todos los dígitos, pero solo como un solo carácter.