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.
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.
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.
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) |
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 |
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 |
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) |
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 |
(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 |
(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 |
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. |
[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”.
Convendría ampliar/mejorar la sección de ejemplos, y revisar el artículo en general.