Expresiones Regulares – 03

En la segunda entrega de la serie iniciamos la lista de los caracteres especiales o "metacaracteres"; en esta entrega ampliaremos esta lista.

Los paréntesis cuadrados "[]"

La función de los paréntesis cuadrados en el lenguaje de las expresiones regulares es representar "clases de caracteres", osea, agrupar caracteres en grupos o clases. Son útiles cuando necesitamos buscar uno de un grupo de caracteres. Dentro de los paréntesis cuadrados es posible utilizar el guión "-" para especificar rangos de caracteres. Adicionalmente, los metacracteres pierden su significado y se convierten en literales cuando se encuentran dentro de los parentesis cuadrados. Por ejemplo, como vimos en la entrega anterior "\d" nos es útil para buscar cualquier caracter que represente un dígito. Sin embargo esta denominación no incluye el punto "." que divide la parte decimal de un número. Para buscar cualquier caracter que representa un dígito o un punto podemos utilizar la expresión regular "[\d.]". Como dijimos, dentro de los paréntesis cuadrados, el punto representa un caracter literal y no un metacaracter, por lo que no es necesario antecederlo con la barra inversa. El único caracter que es necesario anteceder con la barra inversa dentro de los parentesis cuadrados es la propia barra inversa. La expresión regular "[\dA-Fa-f]" nos permite encontrar dígitos hexadecimales. Los paréntesis cuadrados nos permiten también encontrar palabras aún si están escritas de forma errónea, por ejemplo, la expresión regular "expresi[oó]n" nos permite encontrar en un texto al palabra "expresión" aunque se haya escrito con o son acento. Es necesario aclarar que sin importar cuantos caracteres se introduzcan dentro del grupo por medio de los paréntesis cuadrados, el grupo solo le dice al motor de base de búsqueda que encuentre un solo caracter, osea, que "expresi[oó]n" no encontrará "expresioon" o "expresioón".

La barra "|"

Nos sirve para indicar una de varias opciones. Por ejemplo, la expresión regular "a|e" encontrará cualquier "a" o "e" dentro del texto. La expresión regular "este|oeste|norte|sur" nos permitirá encontrar cualquiera de los nombres de los puntos cardinales. La barra se utiliza comúnmente en conjunto con otros caracteres especiales como veremos más adelante.

El signo de dólar "$"

Representa el final de la cadena de caracteres o el final de la linea, si estamos utilizando el modo multi-linea. No representa un caractér en especial sino una posición. Si utilizamos la expresión regular "\.$" encontraremos todos los lugares donde un punto finalize la linea, lo que es útil para avanzar entre párrafos.

El acento circunflexo "^"

Este caractér tiene una doble funcionalidad, que difiere cuando se utiliza individualmente y cuando se utiliza en conjunto con otros caractéres especiales. Vamos a comentar en primer lugar su funcionalidad como caracter individual.
De manera similar que el signo de dólar "$" este caracter representa el inicio de la cadena, de forma que si utilizamos la expresión regular "^[a-z]" nos permitirá encontrar todos los párrafos que den inicio sin utilizar la letra mayúscula.
Cuando se utiliza en conjunto con los paréntesis cuadrados de la siguiente forma "[^\w ]" nos permite encontrar cualquier caracter que NO se encuentre dentro del grupo indicado. La expresión indicada nos permite encontrar, por ejemplo, cualquier caracter que no sea alfanumérico o un espacio, osea, busca todos los símbolos de puntuación y demás caracteres especiales.
La utilización en conjunto de los caracteres especiales "^" y "$" nos permite realizar validaciones en forma sencilla. Por ejemplo "^\d$" nos permite asegurarnos de que al cadena que deseamos verificar representa un único dígito, "^\d\d/\d\d/\d\d\d\d$" nos permite validar una fecha en formato corto, aunque no nos permite verificar si es una fecha válida, ya que 99/99/9999 también calza en este formato; esta validación también puede realizarse, como veremos más adelante.

Los paréntesis redondos "()"

De forma similar que los paréntesis cuadrados, los paréntesis redondos nos sirven para agrupar caracteres, sin embargo existen varias diferencias fundamentales entre los grupos establecidos por medio de parentesis cuadrados y los grupos establecidos por paréntesis redondos:

  • Los caracteres especiales conservan su significado dentro de los paréntesis redondos.
  • Los grupos establecidos con paréntesis redondos establecen una "etiqueta" o "punto de referencia" para el motor de búsqueda que puede ser utilizada posteriormente como veremos más adelante.
  • Utilizado en conjunto con la barra "|" nos permite hacer búsquedas opcionales. Por ejemplo la expresión regular "al (este|oeste|norte|sur) de" nos permite buscar textos que nos den indicaiones por medio de puntos cardinales, mientras que la expresión regular "este|oeste|norte|sur" encontraría "este" en la palabra "esteban".
  • Utilizado en conjunto con otros caracteres especiales de los que hablaremos posteriormente, permite obtener funcionalidad adicional.

El signo de pregunta "?"

El signo de pregunta tiene varias funciones dentro del lenguaje de las expresiones regulares. La primera de ellas es especificar que una parte de la búsqueda es opcional. Por ejemplo, la expresión regular "ob?scuridad" nos permite encontrar tanto "oscuridad" como "obscuridad". En conjunto con los parentesis redondos nos permite especificar que un conjunto mayor de caracteres es opcional; por ejemplo "Nov(\.|iembre|ember)?" nos permite encontrar tanto "Nov" como "Nov.", "Noviembre" y "November".
Como dijimos anteriormente los paréntesis redondos nos permiten establecer un "punto de referencia" para el motor de búsqueda, sin embargo, algunas veces, no queremos utilizarlos con este propósito, como en el ejemplo anterior "Nov(\.|iembre|ember)?". En este caso el establecimiento de este punto de referencia (que distcutiremos en futuras entregas) representa una inversión inútil de recursos por parte del motor de búsqueda. Para evitar esto podemos utilizar el signo de pregunta de la siguiente forma: "Nov(?:\.|iembre|ember)?". Aunque el resultado obtenido será el mismo, el motor de búsqueda no realizará una inversión inútil de recursos en este grupo, sino que lo ignorará. Cuando no sea necesario reutilizar el grupo, es aconsejable utilizar este formato.
De forma similar, podemos utilizar el signo de pregunta con otro significado: Los paréntesis redondos definen grupos "anónimos", sin embargo podemos utilizar el signo de pregunta en conjunto con los paréntesis triangulares "<>" para "nombrar" estos grupos de la siguiente forma: "^(?<Dia>\d\d)/(?<Mes>\d\d)/(?<Año>\d\d\d\d)$"; Con lo cual le decimos al motor de búsqueda que los primeros dos dígitos encontrados llevarán la etiqueta "Dia", los segundos la etiqueta "Mes" y los últimos cuatro dígitos llevarán la etiqueta "Año".

Nota: En futuras entregas veremos como utilizar los "puntos de referencia" establecidos por los paréntesis redondos, tanto los que se establecen en forma anónima, como los que se establecen con un determinado nombre.

A pesar de la complejidad y flexibilidad que nos dan los caracteres especiales que hemos estudiado hasta ahora, en su mayoría nos permiten encontrar solamente un caractér a la vez, o un grupo de caracteres a la vez. En la próxima entrega estudiaremos los últimos metacaracteres, que nos permiten establecer repeticiones.

3 pensamientos en “Expresiones Regulares – 03

  1. Quiero felicitarle por su investigacion.  Soy programador y andaba en lo mismo.  Aqui encontré exactamente lo que andaba buscando.  Muchas Gracias y Felicitaciones nuevamente por su trabajo.
     
    A mi me ha parecido sumamente valioso y me ha sido de gran utilidad.

  2. hola, una consulta, como hago para crear una expresion regular que Retorne true si la cadena tiene todos sus caracteres numericos.Opcionalmente puede tener un unico carácter con símbolo – al comienzo de lacadena,y tambien puede tener un carácter con símbolo , con la restricción de que no podra estar al comienzo ni final de la cadena. ademas, debo utilizar la funcion: function IsNumeric(cadena). AYUDAAA!!!, soy nueva en esto, gracias!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s