Guía de expresiones regulares

Introducción

La primera duda que se nos plantea es: ¿Qué es una expresión regular? Intentare explicarlo con mis palabras. Una expresión regular es una cadena que hace patrón de construcción de otras cadenas, es decir, algo que nos indica que forma debe tener una cadena.

La principal manera de usar una expresión regular es compararla directamente con la cadena, y decimos que la expresión regular "casa" con la cadena cuando dentro de la cadena, encontramos al menos una subcadena que coincida con el patrón. La subcadena puede ser un fragmento de la cadena o la cadena al completo.

De esta manera podemos construir una expresión regular que "case" con palabras que comiencen por a luego tengan una serie de b's y acaben por c y asi detectar tanto la palabra 'abc' como la palabra 'abbbbc' y sus infinitas combinaciones.

Información

Este documento ha sido desarrollado por Iván Arias basándose en la documentación de las expresiones regulares PCRE en www.php.net.

El documento ha sido realizado para www.php-hispano.net.

Si tienes alguna duda de las expresiones regulares o de PHP en general, visita la página o chatea con nosotros en #php_para_torpes del iRC-Hispano.

Cómo leer este documento

Para realmente adquirir algún conocimiento de este documento es recomendable que leas el documento por orden. Según avanza el documento la dificultad es creciente, con lo que si no comprendes algún punto, no sigas leyendo, revisa los apartados anteriores y asegúrate de que comprendes todos los ejemplos.

También sería conveniente que según vayan surgiendo los ejemplos, los pruebes y hagas variaciones sobre ellos para asegurarte que realmente comprendes lo que se trata de explicar. Este documento puede ayudar a comprender las expresiones regulares, pero si no trabajas tú con ellas y no pruebas cosas, es muy dificil que aprendas a usarlas.

Me gustaría que me hicieseis llegar comentarios acerca del documento, qué os pareció, en que partes tuvisteis más dificultad... Así podré ver que partes son más dificiles de entender y tratar de explicarlas de una manera más detallada.

Caracteres de las Expresiones Regulares

La mayoría de los caracteres suelen casar consigo mismo, es decir, la expresión regular "a" casaría con cualquier 'a' de la cadena. Sin embargo, para lo construcción de la expresión regular necesitamos ciertos caracteres especiales que nos hagan, en cierto modo, de "modificadores" (por ejemplo, para indicar que un carácter se puede repetir un cierto número de veces)

A continuación os detallo estos caracteres especiales y su significado. Si necesitásemos casar con uno de estos caracteres en el texto, tendríamos que poner delante el carácter de escape.

"\" Carácter de escape. Más adelante explico mejor su funcionamiento.

"^" Carácter de inicio de cadena. Cuando compares una cadena con una expresión regular, esta puede casar tanto al principio como por el medio. Por ejemplo la expresión regular "a" casaría con cualquier 'a' de la cadena. Si especificamos "^a" la expresión regular sólo casará con una 'a' que este al principio de la cadena.

"$" Carácter de fin de cadena. Funciona igual que el carácter '^', sólo que este siempre casa al final de la cadena.

"." Por defecto este carácter casará con cualquier carácter excepto con el carácter de salto de línea '\n'. Si necesitamos encontrar una 'a', cualquier carácter y una 'b' la expresión regular sería: "a.b".

"[" Carácter de inicio de definición de clase de caracteres. Explicaré mas adelante como funciona

"]" Carácter de fin de definición de clase de caracteres.

"|" Carácter de inicio de rama alternativa. Este carácter hace de o lógica, si necesitáramos casar con una 'a' o con una 'b', la expresión regular sería "a|b".

"(" Carácter de inicio de subpatrón.

")" Carácter de fin de subpatrón.

"*" Carácter cuantificador cero o más. Por ejemplo "a*" casaría tanto con la cadena vacía como "a", "aa", "aaa", …

"+" Carácter cuantificador uno o más. Idéntico a '*' salvo que no casa con la cadena vacía.

"{" Carácter de inicio de valores mínimo máximo. Más adelante lo explico con más detalle.

"}" Carácter de fin de valores mínimo máximo.

"?" Tiene varias utilidades: cuantificador, modificador de codicia y para definir clases de caracteres especiales. A lo largo del documento las explicaremos.