Más sobre expresiones regulares en AOO Writer 3.4

Mi libro sobre Apache OpenOffice Writer 3.4 tiene un capítulo dedicado al sistema de búsqueda por expresiones regulares en Writer, pero claro, no podía poner todo sobre el tema allí…

Como breve resumen introductorio mientas corren a abrir el libro para saber de qué estoy hablando, las expresiones regulares permiten establecer «reglas de búsqueda» generales: por ejemplo, la expresión regular

buscad[o|a]

encontraría tanto «buscado» como «buscada» pero se saltaría «buscad». Y si queremos evitar el encontrar una parte de la palabra «buscados» (la expresión anterior marcaría todo menos la s…) podemos utilizar

buscad[o|a]\b

donde \b representa un «borde de palabra». En este sentido, las expresiones regulares serían la extensión al infinito del asterisco utilizado para buscar archivos… pero esto ya lo he comentado en el libro, por lo que pueden repasar el capítulo correspondiente antes de leer lo que sigue 😉

Buscando texto «encerrado»

¿De regreso ya? Supongamos que queremos encontrar texto encerrado entre paréntesis, independientemente de qué se encuentra entre esos paréntesis: la única condición sería que no existieran otros paréntesis en medio… la expresión regular que funciona para esto sería la siguiente

\([^\(]*\)

Para buscar corchetes, sería suficiente reemplazar los paréntesis por corchetes en la expresión anterior. Ahora bien, tanto los paréntesis como los corchetes son caracteres especiales para las expresiones regulares y por eso es que necesitamos utilizar la barra, pero si queremos encontrar por ejemplo algo encerrado en «comillas latinas» podemos simplemente utilizar

«[^«]*»

Lo mismo para las comillas tipográficas inglesas u otros signos.

Algunas especialidades

Supongamos que queremos buscar un carácter especial, por ejemplo un símbolo matemático que no se encuentra en el teclado pero que sabemos ha sido introducido en el documento. En este caso solo necesitamos conocer el código unicode que representa ese símbolo. Por ejemplo, para encontrar ⇏ podemos buscar por

\u21cf

En general, si conocemos el código exadecimal que representa el carácter, para encontrarlo podemos utilizar \uXXXX, donde XXXX representa el código en cuestión.

IMPORTANTE: en OOo hasta la versión 3.3 y en todas las versiones de LibO se utiliza \x en lugar de \u.

Para buscar una letra cualquiera podría usarse un «rango» como

[a-z]

pero esto tiene sus límites, ya que por ejemplo no detectará una ñ… Para ser lo más general posible, se puede utilizar

[:alpha:]

que encontrará no solo la ñ sino también caracteres acentuados… pero no encontrará signos ortográficos o espacios.

Para buscar solo espacios (de cualquier tipo, incluyendo los «protegidos» que se insertan con Ctrl-Mayúsculas-Espacio), se puede utilizar

[:space:]

mientras que para buscar un número, en lugar del rango [0-9] podemos utilizar

[:digit:]

Correcciones que vendrán en 3.4.1

Con la introducción del nuevo sistema de búsquedas por expresiones regulares en AOO 3.4.0 se abrieron nuevas posibilidades ya que el sistema es más rápido que el anterior y respeta los estándares unicode… pero como en toda cosa nueva también aparecieron algunos errores que serán corregidos en 3.4.1. El principal de ellos es la falla al reemplazar por referencias cuando se usan expresiones que contienen \w… pero como ya dije, esto funcionará correctamente en 3.4.1.

Conclusión

Las expresiones regulares son una herramienta sumamente poderosa y versátil, pero el costo de esta versatilidad y este poder es una cierta dificultad de uso: las expresiones regulares son una herramienta «artesanal» en el sentido de que no existe una única forma de utilizarlas… pero eso agrega un desafío que hace más entretenido su uso.

Anuncios

  1. #1 por Antonio A el 8 noviembre, 2013 - 11:03

    Ole sus cohone ahí! me ha servido mucho la expresión <<[^<>
    Muchas gracias!

A %d blogueros les gusta esto: