Tabla de Contenidos

Referencia compacta de expresiones regulares (PCRE)

El propósito de esta página es proporcionar una breve recopilación de las expresiones regulares compatibles con Perl (de ahi las siglas PCRE, Perl Compatible Regular Expressions) más frecuentemente utilizadas.

Introducción

Las expresiones regulares de Perl son muy similares a las expresiones regulares extendidas del estándar POSIX, aunque con algunas adiciones que permiten mayor funcionalidad para el tratamiento de texto. El proyecto PCRE surgió para crear una librería que permitiese el uso de tales expresiones sin el requerimiento de Perl, y muchas aplicaciones populares (Exim, Postfix, Squid, Apache, PHP, y un largo etcétera) se apoyan en dicha librería.1)

Si a esto añadimos que la mayoría de los lenguajes de programación soportan expresiones regulares muy similares a estas, resulta evidente entonces que dominarlas es sumamente útil.

Sintaxis

La sintaxis de las expresiones regulares puede resultar extraña al principio, pero uno llega a familiarizarse rápidamente con ella en cuanto comienza a utilizar estas expresiones habitualmente.

Sintaxis básica

Expresión Comportamiento
m/regex/ Buscar coincidencias con la expresión regex (las barras delimitan el inicio y fin de la expresión, en este caso la m no es imprescindible)
m/regex/i Buscar coincidencias con la expresión regex ignorando mayúsculas/minúsculas
s/regex1/regex2/ Búsqueda y reemplazo de regex1 con regex2 (solo la primera ocurrencia)
s/regex1/regex2/g Búsqueda y reemplazo de regex1 con regex2 (global)

Caracteres especiales

Expresión Comportamiento
{}[]()^$.|*+? Metacarácter, para buscar coincidencias con estos caracteres, hay que anular (escapar) con \
\ Anular (escapar) el próximo metacarácter
| Alternación
() Agrupación
[…] Coincidir con un carácter que esté entre los corchetes
[^…] Coincidir con un carácter que no esté en los corchetes

Rangos de caracteres

Expresión Comportamiento
[a-z] Coincidir con un carácter entre la a y la z (minúsculas)
[A-Z] Coincidir con un carácter entre la A y la Z (mayúsculas)
[0-9] Coincidir con un carácter entre 0 y 9

Comodines o abreviaturas

Expresión Comportamiento
. Coincidir con un carácter cualquiera de la línea
\w Coincidir con un carácter de palabra (alfanumérico más “_”)
\W Coincidir con un carácter que no sea de palabra
\l Coincidir con un carácter alfabético en minúsculas (equivalente a [a-z])
\u Coincidir con un carácter alfabético en mayúsculas (equivalente a [A-Z])
\t Coincidir con un carácter de tabulación
\s Coincidir con un carácter de espaciado (incluyendo la tabulación)
\S Coincidir con un carácter que no sea de espaciado
\d Coincidir con un carácter de dígito decimal (equivalente a [0-9])
\D Coincidir con un carácter que no sea de dígito decimal
\n Coincidir con un carácter de nueva línea (LF, NL)
\r Coincidir con un carácter de retorno (CR)
\R Coincidir con una combinación de salto de línea (CRLF, LFCR, o fin de línea de Unicode)
\N Coincidir con un carácter que no sea de salto de línea
\f Coincidir con un carácter de salto de página (FF)

Coincidencias de posición

Expresión Comportamiento
^ Coincidir con el inicio de la línea o cadena de texto
$ Coincidir con el final de la línea o cadena de texto
\b Coincidir con el límite de una palabra
\B Coincidir con el límite de una no-palabra

Factores de repetición (avariciosos)

(Coincidir el máximo de veces posible)

Expresión Comportamiento
* Coincidir 0 o más veces
+ Coincidir 1 o más veces
? Coincidir 0 o 1 vez
{n} Coincidir exactamente n veces
{n,} Coincidir al menos n veces
{n,m} Coincidir al menos n veces, pero no más de m veces

Factores de repetición (perezosos)

(Coincidir el mínimo de veces posible)

Expresión Comportamiento
*? Coincidir 0 o más veces
+? Coincidir 1 o más veces
?? Coincidir 0 o 1 vez
{n}? Coincidir exactamente n veces
{n,}? Coincidir al menos n veces
{n,m}? Coincidir al menos n veces, pero no más de m veces

Look-Ahead y Look-Behind

Este concepto es menos transparente que los anteriores, por ello se ejemplifica brevemente cada caso.

Expresión Comportamiento
(?=…) Aserción positiva look-ahead de longitud cero. Ej. regex1(?=regex2) encuentra una coincidencia si se encuentran tanto regex1 como regex2, pero no incluye regex2 en el resultado.
(?!…) Aserción negativa look-ahead de longitud cero. Ej. regex1(?!regex2) encuentra una coincidencia si se encuentra regex1 y no regex2, pero no incluye regex2 en el resultado.
(?<=…) Aserción positiva look-behind de longitud cero. Ej. (?<regex1)regex2 encuentra una coincidencia si se encuentran tanto regex1 como regex2, pero no incluye regex1 en el resultado.
(?<!…) Aserción negativa look-behind de longitud cero.

Ejemplos de usos frecuentes

[Lmv]as

Esta expresión coincidiría con “Las”, “mas” y “vas”.

per+o

Esta expresión coincidiría con “pero” y también con “perro”.

cant?a

Esta expresión coincidiría con “canta” y también con “cana”.

[a-z]+p.

Esta expresión coincidiría con “arpa”, “mp3”, “pp.”, “zip!”, etcétera, pero no con “REPO”.

^(.*)[^.]$

Esta expresión coincidiría con cualquier línea cuyo último carácter no sea un punto.

(www|webmail)\.(mi|tu)?ejemplo\.cu

Esta expresión coincidiría con las siguientes URLs:

^(\d){2,4}-(\d){4}$

Esta expresión coincidiría con las líneas que tengan solo números telefónicos con formatos como “06-0101”, “831-4949” o “5264-2266”, pero nunca con la forma “861-75-55”.

Notas

Convendría ampliar/mejorar la sección de ejemplos, y revisar el artículo en general.

Atribuciones

1)
Como la librería tiene licencia BSD, puede utilizarse también en aplicaciones de código privativo, por lo que su empleo debe ser muy superior al reportado oficialmente.