# El manual del editor de expresiones regulares

Jesper K. Pedersen

    blackie@kde.org

2001-07-03
0.1
&underFDL;
2001 Jesper K. Pedersen

Este manual describe la ventana del editor de expresiones regulares

KDE expresión regular

## Introducción

El editor de expresiones regulares le permite editar expresiones regulares en modo gráfico (en contraste con la sintaxis ASCII). Tradicionalmente, las expresiones regulares han sido escritas con la sintaxis ASCII, lo que, por ejemplo, quedaría como `^.*kde\b`. Los principales inconvenientes de esta forma de edición son:

- Es difícil de entender para los que no son programadores.

- Requiere del uso de secuencias de escape para ciertos símbolos (para que coincida con una estrella, por ejemplo, se necesitaría escribir: `\*`).

- Requiere que recuerde reglas de precedencia (¿Qué representaría `x|y*`? Una única `x` o cualquier número de `y`, O cualquier número de `x` e `y` mezcladas?).

Por el contrario, el editor de expresiones regulares le permite dibujar su expresión regular sin ambigüedad. El editor aclara expresiones de más de dos o tres elementos. No puede hacer que los no programadores entiendan las expresiones regulares, aunque solo las pruebas de los usuarios pueden decir esto. Así, si no es un programador y ha alcanzado el dominio de las expresiones regulares gracias a este editor, por favor hágamelo saber.

## ¿Qué es una expresión regular?

Una expresión regular es una forma de especificar condiciones para hacerlas coincidir con las que tiene en mente. Normalmente, cuando busca en un editor de texto, especifica el texto para buscar literalmente; por otro lado, al usar expresiones regulares, puede indicar que se busque un patrón determinado. Ejemplos de estas búsquedas son Estoy buscando la palabra KDE, pero sólo al principio de la línea, o Estoy buscando la palabra `el`, pero debe aparecer sola y no en medio de una palabra, o Estoy buscando archivos que empiecen con la palabra `prueba`, seguida por un número de dígitos, por ejemplo `prueba12`, `prueba107` y `prueba007`.

Puede construir expresiones regulares complejas a partir de expresiones regulares más sencillas, tal y como se construyen los juguetes Lego grandes a partir de partes más pequeñas. Como en el mundo de Lego, hay un número de bloques de construcción básicos. En lo sucesivo, se describirá cada uno de estos bloques de construcción básicos usando ejemplos.

Buscando un texto normal.

Si solo quiere buscar un texto dado, la expresión regular no es una buena elección. El motivo de esto es que las expresiones regulares asignan un significado especial a algunos caracteres. Esto incluye los siguientes caracteres: `.*|$`. Por tanto, si quiere buscar el texto `kde.` (es decir, los caracteres `kde` seguidos por un punto), necesita especificar esto como `kde\.`

El editor de expresiones regulares soluciona este problema teniendo en cuenta las reglas de escape por usted.

Escribir `\.` en lugar de`.` se llama escapar.

Coincidencia de URLs

Cuando seleccione algo que se parezca a una URL en KDE, el programa `Klipper` le ofrecerá la posibilidad de iniciar `Konqueror` con la URL seleccionada.

`Klipper` hace esto buscando una coincidencia de la selección entre varias expresiones regulares diferentes. Cuando una de las expresiones regulares coincide, se le ofrecerá la posibilidad de ejecutar el comando que se amolde a ella.

La expresión regular para URLs dice (entre otras cosas), que la selección debe comenzar con el texto `http://`. En las expresiones regulares, esto se indica precediendo al texto `http://` con el carácter `^`.

El ejemplo anterior es una muestra de coincidencia con posiciones usando expresiones regulares. Del mismo modo, la posición fin-de-línea se puede expresar usando el carácter `$` (es decir, un símbolo de dólar).

Buscar la palabra `el`, pero no en el `la`, `aqu` el ni `s` el `lo`.

Se pueden indicar dos tipos de posición extra en la forma anterior, llamadas la posición en el límite de la palabra y posición no en el límite de la palabra. Estas posiciones se especifican usando `\b` (para límite de palabra) y `\B` (para no límite de palabra)

Por tanto, la búsqueda de la palabra `el` se puede hacer usando la expresión regular `\bel\b`. Esto especifica que se está buscando `el` sin letras a ambos lados (es decir, con un límite de palabra a cada lado).

Estas cuatro posiciones de búsqueda se pueden insertar en el editor de expresiones regulares usando cuatro herramientas de posición diferentes.

Buscar `este` o `ese`

Imagine que quiere recorrer su documento buscando la palabra `este` o la palabra `ese`. Con un método de búsqueda normal puede hacerlo en dos pasos: en el primero buscaría `este`; y en el segundo buscaría `ese`.

Si usa expresiones regulares, podrá buscar ambas palabras en un solo paso. Puede hacer esto buscando `este|ese`. Es decir, separando las dos palabras con una barra vertical.

Tenga en cuenta que a cada lado de la barra vertical hay una expresión regular. Por tanto, esta característica no sirve solo para buscar dos o más trozos de texto, sino para buscar dos expresiones regulares diferentes.

En el editor de expresiones regulares no tendrá que escribir la barra vertical: seleccione en su lugar la herramienta alternativa, e inserte las dos expresiones regulares una a continuación de la otra.

Coincidir con cualquier cosa

Las expresiones regulares se suelen comparar con la búsqueda mediante comodines de la shell (la posibilidad de especificar un número de archivos usando el asterisco). Seguramente reconocerá los comodines de búsqueda de los siguientes ejemplos:

- `rm *~` (aquí `*~` es el comodín de la shell para referirse a cualquier nombre de archivo que termine en `~`)

- cat test??.res (se refiere a cualquier archivo que empiece con `test` seguido de dos caracteres cualesquiera, y que termine con `.res`)

En la shell, el asterisco se refiere a cualquier carácter repetido cualquier número de veces. En otras palabras, el asterisco coincide con cualquier cosa. Esto se escribe como `.*` en la sintaxis de las expresiones regulares. El punto coincide con cualquier carácter aislado (es decir,un carácter), y el asterisco le indica a la expresión regular que lo que haya antes de él puede repetirse cualquier número de veces. En conjunto, esto quiere decir cualquier carácter aislado repetido cualquier número de veces.

Esto puede parecer demasiado complicado, pero cuando tenga una perspectiva más adecuada, notará su potencia. Veamos otra expresión regular básica: `a`. La letra `a`, por sí misma, es una expresión regular que coincide con una sola letra, exactamente con la letra `a`. Si la combinamos con un asterisco (es decir,`a*`), tendremos una expresión regular que representa a cualquier número de aes.

Podemos combinar varias expresiones regulares, una tras otra. Por ejemplo, `ba(na)*`.

`(na)*` solo indica que lo que está dentro del paréntesis se repite cualquier número de veces.

Imagine que ha tecleado esta expresión regular en el campo de búsqueda de un editor de texto; en tal caso, encontrará las siguientes palabras (entre otras): `ba`, `bana`, `banana`, `bananananananana`.

Teniendo en cuenta la información anterior, no le será difícil escribir el comodín de la shell `test??.res` como una expresión regular. Respuesta: `test..\.res`. El punto por sí solo representa a cualquier carácter. Para representar un único punto debe escribir `\.`

Esto se llama escapar

. En otras palabras, la expresión regular `\.` representa a un punto, mientras que el punto por sí mismo representa a cualquier carácter.

En el editor de expresiones regulares, se pueden crear expresiones regulares repetidas usando la herramienta repetir

Reemplazar `&` por `&amp;` en un documento HTML

En HTML, el carácter especial `&` se debe escribir como `&amp;` (que es similar a escapar en una expresión regular).

Imagine que ha escrito un documento HTML en un editor normal (por ejemplo, XEmacs o Kate), y olvidó completamente esta regla. Lo que hará cuando se dé cuenta de su error será reemplazar cada aparición de `&` por `&amp;`.

Esto se puede hacer fácilmente usando la herramienta de buscar y reemplazar texto del editor, pero es algo tedioso. Imagine que recordó esta regla de vez en cuando, y lo escribió bien en algunas ocasiones. El reemplazo incondicional haría que `&amp;` se cambiara por `&amp;amp;`.

Lo que verdaderamente querría hacer es que `&` sólo se cambie si no está seguido por las letras `amp;`. Puede hacer esto usando expresiones regulares con la herramienta afirmación previa positiva.

La expresión regular que solo representa a un "ampersand" si no está seguido por las letras `amp;` sería: `&(?!amp;)`. Esto es, por supuesto, más fácil de leer en el editor de expresiones regulares, donde usaría las herramientas de afirmación previa.

## Uso del editor de expresiones regulares

Este capítulo le mostrará cómo funciona el editor de expresiones regulares.

### Organización de la ventana

La parte más importante del editor es, por supuesto, el área de edición. Aquí es donde dibujará sus expresiones regulares. Es el área gris más grande del centro.

Sobre el área de edición tiene dos barras de herramientas. La primera contiene las acciones de edición (similares a las herramientas existentes en un programa de dibujo). La segunda barra de herramientas contiene el botón qué es esto y los botones para deshacer y rehacer.

Debajo del área de edición encontrará la expresión regular construida actualmente en formato de sintaxis ASCII, que se actualiza automáticamente mientras está editando la expresión regular en el editor gráfico. Si prefiere actualizar a mano la expresión ASCII, puede hacerlo directamente: el editor gráfico se actualizará al vuelo para reflejar sus cambios.

Finalmente, a la izquierda del área de edición encontrará algunas expresiones regulares previamente construídas. Sirven para dos propósitos: (1) Cuando cargue el editor con una expresión regular, esta expresión regular se hace más fácil o más comprensible al reemplazar las expresiones regulares comunes. En la captura de pantalla de arriba, puede ver cómo la sintaxis ASCII ".*" se ha reemplazado por una caja que dice "cualquier cosa". (2) Cuando inserta una expresión regular, puede encontrar bloques de construcción para sus propias expresiones regulares en el juego de expresiones regulares previamente construídas. Vea la sección sobre expresiones regulares definidas por el usuario para aprender cómo guardar sus propias expresiones regulares.

### Herramientas de edición

El texto de esta sección supone que ha leído el capítulo sobre qué es una expresión regular, o que tiene un conocimiento previo de ese tema.

Todas las herramientas de edición están localizadas en la barra de herramientas que hay sobre el área de edición. Cada una de ellas será descrita a continuación.

#### Herramienta selección

La herramienta de selección se usa para marcar elementos que se podrán copiar-y-pegar, o arrastrar-y-soltar. Es similar a la herramienta de selección de cualquier programa de dibujo.

#### Herramienta texto

Con esta herramienta podrá insertar texto normal. Este texto se hará coincidir literalmente, por lo que no tiene que preocuparse de escapar caracteres especiales. En el ejemplo anterior, se construirá la siguiente expresión regular: `abc\*\\\)`

#### Herramienta carácter

Con esta herramienta podrá insertar rangos de caracteres. Los ejemplos incluyen lo que en texto ASCII se expresa `[0-9]`, `[^a-zA-Z,_]`. Cuando se inserte un elemento con esta herramienta, aparecerá un diálogo en el que puede especificar los rangos de caracteres.

Vea la descripción de expresiones regulares repetidas.

#### Herramienta cualquier carácter

Esta es la expresión regular "punto" (.). Representa a cualquier carácter.

#### Herramienta repetir

Permite repetir elementos. Esto incluye lo que en sintaxis ASCII se representa usando un asterisco (*), un signo más (+), una interrogación (?), y rangos ({3,5}). Cuando inserte un elemento usando esta herramienta, aparecerá un diálogo pidiéndole el número de veces que se repetirá.

Especifique qué se repetirá dibujándolo dentro de la caja que inserta esta herramienta.

Los elementos repetidos se pueden construir tanto fuera como dentro de esta caja. Así, puede dibujar primero lo que quiere repetir, seleccionarlo, y utilizar luego la herramienta para repetirlo. Alternativamente, puede insertar primero el elemento repetir y dibujar dentro de él lo que quiera repetir.

Vea la descripción de expresiones regulares repetidas.

#### Herramienta alternativa

Esta es la expresión regular alternativa (|). Debe especificar las alternativas dibujando cada una de ellas encima de la otra dentro de la caja que inserta esta herramienta.

Vea la descripción de expresiones regulares alternativas

#### Herramienta componer

La herramienta componer no representa ninguna expresión regular. Se utiliza para agrupar otras subpartes en el interior de una caja, que se puede contraer fácilmente para mostrar solo su título. Esto se puede ver en la parte derecha de la captura de pantalla anterior.

#### Herramientas comienzo/fin de línea

Las herramientas de comienzo y fin de línea coinciden con el comienzo y el final de la línea, respectivamente. La expresión regular de la captura de pantalla de anterior representa a líneas que solo contienen espacios.

Vea la descripción de expresiones regulares de posición.

#### Herramientas de (no) límite de palabra

Las herramientas de límites coinciden respectivamente o no con un límite de palabra. La expresión regular de la captura de pantalla representa a cualquier palabra que comience con `el`. Sin embargo, la palabra `el` aislada, no estaría representada.

Vea la descripción de expresiones regulares de límites.

#### Herramientas de afirmación previa positiva/negativa

Las herramientas de afirmación previa especifican una expresión regular positiva o negativa a buscar. La coincidencia, sin embargo, no es parte de la coincidencia total.

Nota: Sólo se le permite colocar afirmaciones previas al final de las expresiones regulares. El editor de expresiones regulares no le obliga a esto.

Vea la descripción de expresiones regulares de afirmación previa.

### Expresiones regulares definidas por el usuario

A la izquierda del área de edición hay una lista que contiene las expresiones regulares definidas por el usuario. Algunas de estas expresiones regulares se preinstalaron en el momento en que instaló KDE, mientras que otras las puede guardar usted.

Estas expresiones regulares sirven para dos propósitos (vea la descripción detallada): (1) para ofrecerle un juego de bloques de construcción, y (2) para hacer las expresiones regulares más sencillas.

Puede guardar sus propias expresiones regulares haciendo clic con el botón derecho del ratón en el área de edición y seleccionando `Guardar la expresión regular`.

Si la expresión regular que está guardando está dentro de un contenedor compuesto, la expresión regular se encargará de hacer las subsiguientes expresiones regulares más sencillas.

Las expresiones regulares definidas por el usuario se pueden borrar o renombrar pulsando el botón derecho del ratón sobre ellas en la lista.

## Informando de errores y sugiriendo características

Los errores y las sugerencias de características nuevas se realizan a través del sistema de seguimiento de fallos de KDE. Antes de informar de un error o sugerir una característica, compruebe que nadie ha informado o sugerido lo mismo con anterioridad.

## Preguntas frecuentes

### ¿Soporta el editor de expresiones regulares referencias hacia atrás?

No, por el momento no están soportadas. Está planeado para la siguiente versión.

### ¿Soporta el editor de expresiones regulares mostrar las coincidencias?

No, pero con suerte estará disponible en la próxima versión

### Soy el autor de un programa de KDE, ¿cómo puedo usar este editor en mi aplicación?

Vea la documentación para la clase KRegExpEditorInterface.

### No puedo encontrar el botón Editar expresión regular por ejemplo, en Konqueror en otra instalación de KDE3, ¿por qué?

El editor de expresiones regulares se encuentra en el paquete KDE-utils. Si no ha instalado este paquete, los botones de editar expresiones regulares no aparecerán en los programas.

## Créditos y licencias

Copyright de la documentación 2001, Jesper K. Pedersen blackie@kde.org

&underGPL; &underFDL;