Expresiones Regulares – 02

En la primera parte de esta serie hablamos de las herramientas necesarias para trabajar con las expresiones regulares. Dijimos que el mínimo para obtener un buen resultado era tener a mano una herramienta de cada tipo, una para el usuario final y otra de programación.

Aunque es posible utilizar las expresiones regulares con cualquier combinación de las herramientasmencionadas, este articulo y los demás de esta serie estarán basados en las dos herramientas que yo utilizo para mi trabajo con expresiones regulares: .Net Framework y EditPad Pro. Aunque el conocimiento general del tema no se verá afectado, si lo estarán las explicaciones prácticas acerca de la utilización de las herramientas y los ejemplos de código. También es necesario hacer notar que existen algunos detalles de sintaxis de las expresiones regulares propietarios del .Net Framework que se utilizan en forma diferente en las demás herramientas de programación. Cuando estos casos se den trataré de hacerlo notar para que el lector pueda buscar información respecto a estos detalles en fuentes adicionales.

ExReg como motor de búsqueda

Las expresiones regulares, como cualquier otro motor de búsqueda, permiten encontrar porciones especificas de texto dentro de una cadena más grande de caracteres. Así, si queremos encontrar el texto "lote" en la expresión "el ocelote salto al lote contiguo" cualquier motor de búsqueda seria capaz de encontrar lo que queremos. Sin embargo, la mayoría de los motores de búsqueda encontrarían también el fragmento "lote" de la palabra "ocelote", lo cual podría no ser lo que queremos. Algunos motores de búsqueda nos permiten adicionalmente especificar que queremos encontrar solamente palabras completas, solucionando este problema. Las expresiones regulares nos permiten especificar todas estas opciones adicionales y muchas otras sin necesidad de configurar opciones adicionales, sino utilizando el mismo texto que le damos a buscar como un lenguaje que nos permite decirle exactamente lo que deseamos encontrar en todos los casos, sin necesidad de recordar que debemos activar la opción de palabras completas la próxima vez que hagamos la búsqueda, ya que la misma búsqueda tendrá la opción incluida en el texto. Y esta representa solamente una de sus ventajas.

ExReg como lenguaje

Entonces, para especificar las opciones que deseamos dentro del texto a buscar utilizamos un "lenguaje" o "convención" mediante el cual le decimos al motor de búsqueda lo que queremos hacer. Este lenguaje le da un significado especial a una serie de caractéres. Por lo tanto cuando el motor de búsqueda de ExReg encuentre estos caractéres no los buscará en el texto en forma literal, sino que buscará lo que los caractéres significan. A estos caracteres se les llama algunas veces "metacaracteres". A continuación se listan los principales metacaracteres y su función y como los interpreta el motor de ExReg.

El Punto "."

El punto es interpretado por el motor de búsqueda como (casi) cualquier otro caracter. Y digo "casi" porque por efecto los caracteres que representan un salto de línea no corresponderán a un punto, a menos que se le especifique esto al motor de ExReg. Por lo tanto si esta opción se apaga en el motor de búsqueda que utilicemos, el punto le dirá al motor que encuentre cualquier caracter sin importar cual sea. En EditPad Pro esto se hace pro medio de la opción "dot matches newline" o "punto corresponde a nueva linea" en las opciones de búsqueda representadas a la derecha (Fig. 1). En .Net Framework se utiliza la opción RegexOptions.Singleline al efectuar la búsqueda o crear la expresión regular.

El punto se utiliza de la siguiente forma: Si se le dice al motor de RegEx que busque "g.t" en la cadena "el gato de piedra en la gótica puerta de getisboro goot" el motor de búsqueda encontrará "gat", "gót" y por último "get". Nóteses que el motor de búsqueda no encuentra "goot" esto es porque el punto representa un solo caracter y únicamente uno. Si queremos que también aparezca esta otra expresión, será necesario utilizar repreticiones, las cuales se explicarán más adelante.

Aunque el punto es muy útil para encontrar caractéres que no conocemos, es necesario recordar que corresponde a cualquier caracter y que muchas veces esto no es lo que queremos buscar. Es muy diferente buscar cualquier caracter que buscar cualquier caracter alfanumérico o cualquier digito o cualquier no-digito o cualquier no-alfanumérico. Debemos tomar esto en cuenta antes de utilizar el punto y obtener resultados que no deseamos.

Pero, que hacemos si queremos encontrar un punto dentro del texto? es aquí donde el siguiente caracter especial se vuelve útil.

La barra inversa "\"

Se utiliza para "marcar" el siguiente caracter de la expresión de búsqueda de forma que este adquiera un significado especial o deje de tenerlo. Osea, la barra inversa no se utiliza nunca por si sola, sino en combinación con otros caracteres. Al utilizarlo por ejemplo en combinación con el punto "\." este deja de tener su significado normal y empieza a comportarse como un caracter literal. Osea, respondiendo la pregunta de como podemos buscar un punto dentro de un texto utilizando ExReg, la respuesta seria utilizando la expresión "\."

De la misma forma, cuando se coloca la barra inversa seguida de cualquiera de los caracteres especiales que discutiremos a continuación, estos dejan de tener su significado especial y se convierten en caracteres de búsqueda literal.

Como ya dijimos, la barra inversa también puede darle significado especial a caracteres que no lo tienen. A continuación hay una lista de algunas de estas combinaciones:

  • \t – Representa un tabulador.
  • \r – Representa el "regreso al inicio" osea el lugar en que la linea vuelve a iniciar.
  • \n – Representa la "nueva linea" el caracter por medio del cual una linea da inicio. Es necesario recordar aqui que en Windows es necesaria una combinación de \r\n para comenzar una nueva linea, mientras que en Unix solamente se usa \n.
  • \a – Representa una "campana" o "beep" que se produce al imprimir este caracter (¿exótico, verdad?)
  • \e – Representa la tecla "Esc" o "Escape"
  • \f – Representa un salto de página
  • \v – Representa un tabulador vertical (!?)
  • \x – Se utiliza para representar caracteres ASCII o ANSI si conocemos su código. De esta forma, si estamos buscando el símbolo de derechos de autor y estamos usando el conjunto de caracteres Latin-1 podemos encontrarlo utilizando "\xA9".
  • \u – Se utiliza para representar caracters Unicode si conocemos su código. "\u00A2" nos da el símbolo de centavos (que es muy útil para representar también colones costarricenses). No todos los motores de RegEx soportan Unicode. El .Net Framework lo hace, pero el EditPad Pro no, por ejemplo.
  • \d – Representa un dígito del 0 al 9.
  • \w – Representa cualquier caracter alfanumérico.
  • \s – Representa un espacio en blanco.
  • \D – Representa cualquier caracter que no sea un dígito del 0 al 9.
  • \W – Representa cualquier caracter no alfanumérico.
  • \S – Representa cualquier caracter que no sea un espacio en blanco.
  • \A – Representa el inicio de la cadena. No un caracter sino una posición.
  • \Z – Representa el final de la cadena. No un caracter sino una posición.
  • \b – Marca el inicio y el final de una palabra.
  • \B – Marca la posición entre dos caractéres alfanuméricos o dos no-alfanuméricos.

La utilidad Charmap.exe de Windows nos puede ayudar a encontrar los códigos ASCII/ANSI/UNICODE que necesitemos.

En la próxima entrega continuaremos con la lista de caractéres especiales y su significado.

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