Referencia rápida para la sintaxis de expresiones regulares

Esta lista de verificación resume las partes más utilizadas o difíciles de recordar del motor de expresiones regulares disponible en las funciones de búsqueda y sustitución en la modificación y conversión de calibre. Tenga en cuenta que este motor es más potente que el motor de expresiones regulares básico utilizado en el resto de calibre.

Clases de caracteres

Las clases de caracteres son útiles para representar diferentes grupos de caracteres de forma sucinta.

Ejemplos:

Representación Clase
[a-z] Letras minúsculas. No incluye caracteres con acentos ni ligaduras
[a-z0-9] Letras minúsculas de la a la z o números de 0 a 9
[A-za-z-] Letras mayúsculas o minúsculas, o un guión. Para incluir el guión en una clase debe ponerlo al principio o al final para que no se confunda con el guión que especifica una gama de caracteres
[^0-9] Cualquier carácter excepto un dígito. El circunflejo (^) al principio de una clase excluye los caracteres de la clase (clase complementaria)
[a-z]--[aeiouy]] Las consonantes minúsculas. Una clase puede incluirse en otra calse. Los caracteres -- excluyen lo que va después
[\w--[\d_]] Todas las letras (incluidos caracteres acentuados o extranjeros). Las clases abreviadas pueden usarse dentro de una clase

Ejemplo:

<[^<>]+> to select an HTML tag

Clases de caracteres abreviadas

Representación Clase
\d Un dígito (lo mismo que [0-9])
\D Cualquier carácter no numérico (lo mismo que [^0-9])
\w Un carácter alfanumérico ([a-zA-Z0-9]) incluidos caracteres con acentos y ligaduras
\W Cualquier carácter de «no palabra»
\s Espacio, espacio duro, tabulación, salto de línea
\S Cualquier carácter «no blanco»
. Cualquier carácter excepto un salto de línea. Use la casilla «multilínea» o el modificar de expresión regular (?s) para incluir el salto de línea.

Los cuantifcadores

Cuantificador Número de repeticiones de la expresión que precede al cuantificador
? 0 o 1 repeticiones de la expresión. Lo mismo que {0,1}
+ 1 o más repeticiones de la expresión. Lo mismo que {1,}
* 0, 1 o más repeticiones de la expresión. Lo mismo que {0,}
{n} Exactamente n repeticiones de la expresión
{mín,max} Número de repeticiones entre el mínimo y el máximo, ambos inclusive
{mín,} Número de repeticiones entre el mínimo, inclusive, y el infinito
{,max} Número de repeticiones entr 0 y el máximo, inclusive

Avaricia

Con cuantificadores, de manera predeterminada, el motor de expresiones regulares es avaricioso: extiende la selección tanto como sea posible. Esto suele ocasionar sorpresas al principio. Se puede añadir ? a un cuantificador para hacerlo perezoso. Procure no poner dos en una misma expresión, el resultado puede ser impredecible.

Tenga cuidado con cuantificadores anidados, como el patrón (a*)*, ya que aumentan el tiempo de proceso exponencialmente.

Disyuntiva

El carácter | en una expresión regular es un O lógico. Significa que puede coincidir bien la expresión que lo precede o bien la que lo sigue.

Exclusión

Método 1

patrón_para_excluir(*SKIP)(*FAiL)|patrón_para_seleccionar

Ejemplo:

"Blabla"(*SKIP)(*FAIL)|Blabla

selecciona Blabla en los textos Blabla, "Blabla o Blabla", pero no en "Blabla".

Método 2

patrón_para_excluir\K|(patrón_para_seleccionar)

"Blabla"\K|(Blabla)

selecciona Blabla en los textos Blabla, "Blabla o Blabla", pero no en "Blabla".

Anclajes

Un anclaje es una forma de seleccionar una ubicación lógica en un texto, en lugar de un carácter. Los anclajes más útiles para el procesado de textos son:

\b
Indica una frontera de palabra, es decir la transición de carácter espaciador a carácter no espaciador. Por ejemplo, puede usar \brata para seleccionar la rata pero no catarata.
^
Coincide con el principio de una línea (en modo multilínea, que es el predeterminado)
$
Coincide con el final de una línea (en modo multilínea, que es el predeterminado)
\K
Restablece la posición de inicio de la selección a su posición en el patrón. Algunos motores de expresiones regulares (pero no calibre) no permiten «mirar atrás» con longitud variable, especialmente con cuantificadores. Cuando puede usar \K con estos motores, también le permite obviar este límite escribiendo el equivalente de una «mirada atrás» positiva con longitud variable.

Grupos

(expresión)
Grupo de captura, que almacena la selección y puede recuperarse después en los patrónes de búsqueda o sustitución con \n, donde n es el número de secuencia del grupo de captura (empezando por 1 en orden de lectura)
(?:expresión)
Grupo que no captura la selección
(?>expresión)
Grupo atómico: En cuanto la expresión se satisface, el motor de expresiones regulares continua y, si el resto del patrón falla, no volverá atrás para probar otras combinaciones con la expresión. Los grupos atómicos no capturan.
(?|expresión)
Grupo de restablecimiento de rama: las ramas en las disyuntivas incluidas en la expresión comparten los mismo números de grupo
(?<nombre>expresión)
Grupo llamado «nombre». La selección pude recuperarse después en el patrón de búsqueda con (?P=name) y en el sustitución con \g<nombre>. Dos grupos diferentes pueden usar el mismo nombre.

Miradas alrededor

Mirada Significado
?= Mirada adelante positiva (se pone después de la selección)
?! Mirada adelante negativa (se pone después de la selección)
?<= Mirada atrás positiva (se pone antes de la selección)
?<! Mirada atrás negativa (se pone antes de la selección)

Las miradas adelante y atrás no consumen caracteres, tienen longitud cero y no capturan. Son grupos atómicos: en cuanto la expresión se satisface, el motor de expresiones regulares continua y, si el resto del patrón falla, no volverá al interior de la mirada para probar otras combinaciones.

Al buscar coincidencias múltiples en un texto, al inicio de cada intento de coincidencia una mirada atrás puede inspeccionar los caracteres anteriores a la posición actual. Por tanto, en el texto 123, el patrón (?<=\d)\d (un dígito precedido por un dígito) debería, en teoría, seleccionar 2 y 3. Por otro lado, \d\K\d sólo puede seleccionar 2, porque la posición de inicio después de la primera selección es justo delante del 3 y no hay suficientes dígitos para una segunda coincidencia. Análogamente, \d(\d) sólo captura 2. En la práctica del motor de expresiones regulares de calibre, la mirada atrás positiva se comporta de la misma manera y selecciona sólo 2, en contra de la teoría.

Pueden incluirse grupos en las miradas, pero la captura no suele ser útil. No obstante, si es útil será necesario ser muy cuidadoso con el uso de cuantificadores en una mirada atrás: la avaricia unida a la ausencia de retorno puede dar lugar a una captura sorprendente. Por este motivo, use \K en lugar de una mirada atrás positiva cuando tenga un cuantificador (o peor, varios) en un grupo de captura dentro de la mirada atrás positiva.

Ejemplo de mirada adelante negativa:

(?![^<>{}]*[>}])

Colocada al final del patrón, evita seleccionar dentro de una etiqueta o un estilo incluido en el archivo.

Siempre que sea posible, es mejor «anclar» las miradas para reducir el número de pasos necesarios para obtener el resultado.

Recurrencia

Representación Significado
(?R) Recurrencia de todo el patrón
(?1) Recurrencia del único patrón del grupo de captura numerado, aquí el grupo 1

Recurrencia es ejecutarse a sí mismo. Esto es útil para consultas equilibradas, como textos entre comillas que pueden contener textos entrecomillados. Así, si durante el procesado de un texto entre comillas dobles encontramos el inicio de un nuevo texto entre comillas dobles, el patrón sabrá qué hacer y se ejecuta a sí mismo. Tendremos un patrón como:

start-pattern(?>atomic sub-pattern|(?R))*end-pattern

Para seleccionar un texto entre comillas dobles sin detenerse en un texto interior:

“((?>[^“”]+|(?R))*[^“”]+)”

Esta plantilla también puede usarse para modificar pares de etiquetas que pueden anidarse, como etiquetas <div>.

Caracteres especiales

Representación Carácter
\t tabulación
\n salto de línea
\x20 espacio (blando)
\xa0 espacio duro

Metacaracteres

Los metacaracteres son caracteres que tienen un significado especial para el motor de expresiones regulares. De estos, doce deben ir precedidos de un carácter de escape, la barra invertida (\), para perder su significado especial y volver a ser caracteres normales:

^ . [ ] $ ( ) * + ? | \

Otros siete metacaracteres no necesitan ir precedidos de una barra invertida (pero pueden ir, sin ninguta otra consecuencia):

{ } ! < > = :

Los caracteres especiales pierden su condición si se usan dentro de una clase (entre corchetes []). El corchete de cierre y el guión tienen un estatus especial dentro de una clase. Fuera de la clase el guión es un simple guión literal, el corchete de cierre sigue siendo un metacarácter.

La barra (/) y la almohadilla (o signo de número) (#) no son metacaracteres, no necesitan escaparse.

En algunas herramientas, como regex101.com con el motor Python, las comillas dobles tienen un estatus especial como separador, y deben escaparse, o deben cambiarse las opciones. Éste no es el caso en el editor de calibre.

Modos

(?s)
Hace que el punto (.) coincida con caracteres de salto de línea también
(?m)
Hace que los anclajes ^ y $ coincidan con el principio y final de líneas en lugar del principio y final del texto completo.