Serie: Expresiones Regulares
- Expresiones regulares: Introducción
- Metacaracteres: Anclas
- Exp. Regulares: Clases de caracteres
- Clases de caracteres predefinidas
- Paréntesis, escape de caracteres, y alternación de patrones
- Cuantificadores
- Tipos de coincidencias y referencias
- Diferencias de sintaxis entre POSIX y Perl
- Expresiones regulares con PHP - POSIX
- Expresiones regulares con PHP - Perl
Esta parte termina el tema de las clases de caracteres.
El punto
El punto (.) es un metacaracter comodín, representa a cualquier caracter, incluso a aquellos caracteres no visibles (saltos de línea, por ejemplo).
Pero no se usa dentro de clases de caracteres, de hecho, dentro de una clase se considera un caracter normal. Es lógico que así sea, dado que de otra forma la clase de caracteres perdería sentido.
Si dentro de la clase se considerara como metacaracter, una clase como [asd.] se leería como "a, s, d o cualquier caracter"), sería lo mismo que [.] ("cualquier caracter").
Peor aún, una clase como [^.] coincidiría con 'un caracter que NO es ningún caracter', que es obviamente una contradicción.
Por este motivo el punto solo tiene su metasignificado fuera de las clases.
Por ejemplo, el patrón
^da.$
(literalmente: una cadena que comienza con 'd', luego tiene una 'a', y termina con un caracter cualquiera), coincide con das, dar, dat, daf, da_, da., da=, etc.
Si la intención es coincidir únicamente con 'da.' (d a punto), tendría que usar el patrón: 'da[.]' o 'da\.', en el segundo caso se escapa el punto para que se tome literalmente.
La inclusión del punto dentro del tema de Clases de caracteres obedece al hecho de que, al igual que las clases, es una forma de representar posibles caracteres que deben aparecer en una posición determinada.
Clases predefinidas
Dado el uso frecuente de ciertos conjuntos de caracteres, los motores de expresiones regulares incluyen algunos rangos predefinidos, que por practicidad se han listados en la siguiente tabla.
| POSIX | Perl | Clase equivalente | Representa a |
[:alnum:] |
[A-Za-z0-9] |
Números y letras | |
[:word:] |
\w |
[A-Za-z0-9_] |
Números, letras, y el infraguión "_" |
\W |
[^\w] |
Negación de la anterior | |
[:alpha:] |
[A-Za-z] |
Letras | |
[:blank:] |
[ \t] |
Espacio y tabulador | |
[:cntrl:] |
[\x00-\x1F\x7F] |
Caracteres de control (los primeros de la tabla ASCII) | |
[:digit:] |
\d |
[0-9] |
Números |
\D |
[^\d] |
Negación de la anterior | |
[:graph:] |
[\x21-\x7E] |
Caracteres visibles (en oposición a los caracteres de control) | |
[:lower:] |
[a-z] |
Letras minúsculas | |
[:print:] |
[\x20-\x7E] |
Caracteres visibles y espacios | |
[:punct:] |
[-!"#$%&'()*+,./:;<=>?@[\\\]_`{|}~] |
Caracteres de puntuación | |
[:space:] |
\s |
[ \t\r\n\v\f] |
Caracteres de espaciado (espacio, tabulador, salto de línea) |
\S |
[^\s] |
Negación de la anterior | |
[:upper:] |
[A-Z] |
Letras mayúsculas | |
[:xdigit:] |
[A-Fa-f0-9] |
Dígitos hexadecimales |
Las indicadas como "POSIX" solamente pueden utilizarse dentro de una clase delimitada por corchetes, mientras que las de Perl pueden usarse en cualquier parte del patrón.
Ejemplos de su uso pueden ser:
[[:digit:]ab] : coincide con un número, una letra a, o una b
\d\d\d : 3 números
Lo que la tabla indica es "dónde se define", no "dónde se soporta". Esto es, se puede usar las clases POSIX en Perl y las de Perl en motores compatibles con POSIX. No se está indicando tampoco que todos los motores deban entender todas las clases, algunos pueden omitir algunas o, por otro lado, agregar otras.
Este capítulo finaliza el tema de las clases de caracteres, el siguiente entrará en el tema de los cuantificadores y el caracter de alternación.
Como "ejercicio", vale la pena ver cómo cambia la expresión regular creada al final del capítulo anterior si se hace uso del punto o de las clases predefinidas:
^[0-3][0-9][-/][0-1][0-9][-/][0-2][0-9][0-9][0-9]$










