El Codiguero
Programando para la wé

Avatar de alvlin Publicado por alvlin, el 03/09/2008
Categorías: Programación

Clases de caracteres predefinidas

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]$

  • Digg
  • del.icio.us
  • Meneame
  • Reddit
  • Technorati
  • StumbleUpon
  • Facebook
  • LinkedIn
  • MySpace
  • Yahoo! Buzz
  • YahooMyWeb

» Si te pareció interesante, dejá un comentario...



Todo el contenido de este sitio está bajo una licencia de Creative Commons.

Campaña AnyBrowser | XHTML 1.0 Válido | CSS 2 Válido | WAI A

Diseño creado por alvlin. Sitio basado en WordPress