Expresiones Regulares en PHP
PHP es un potente lenguaje de scripting del lado del servidor. Aprende a usar expresiones regulares para buscar, validar y transformar cadenas de texto.
Una expresión regular (regex) es un patrón que describe un conjunto de cadenas. En PHP, las expresiones regulares te permiten buscar texto, validar entradas, extraer datos y transformar cadenas con mucho menos código que la lógica manual carácter por carácter. Este capítulo cubre la sintaxis, las funciones preg_ y las técnicas avanzadas más útiles, con ejemplos ejecutables para cada una.
Qué son las Expresiones Regulares
Una expresión regular es una secuencia de caracteres que define un patrón de búsqueda. En lugar de coincidir con una cadena fija, un patrón puede describir toda una familia de cadenas — "cualquier dígito", "una o más letras", "una cadena con forma de correo electrónico", etc. Esto hace que las expresiones regulares sean ideales para:
- Validar entradas de usuario (correos electrónicos, números de teléfono, códigos postales).
- Buscar subcadenas que siguen una forma en lugar de un valor exacto.
- Extraer datos — obteniendo números de pedido, fechas o URLs de texto libre.
- Reemplazar y dividir texto basándose en un patrón.
PHP usa PCRE (Expresiones Regulares Compatibles con Perl), por lo que la sintaxis de patrones es la misma que en Perl, JavaScript y la mayoría de los demás lenguajes modernos.
Cómo Funcionan las Expresiones Regulares en PHP
En PHP, las expresiones regulares son manejadas por la familia de funciones preg_. Cada una toma un patrón como primer argumento y realiza una operación diferente.
Funciones preg_ más comunes
| Función | Descripción |
|---|---|
preg_match() | Busca la primera coincidencia. Devuelve 1 si hay coincidencia, 0 si no la hay, false en caso de error |
preg_match_all() | Encuentra todas las coincidencias. Devuelve el número de coincidencias completas encontradas |
preg_replace() | Reemplaza cada coincidencia con una cadena de reemplazo |
preg_split() | Divide una cadena en un array usando el patrón como delimitador |
preg_quote() | Escapa los caracteres que tienen un significado especial en un patrón |
Un error común: preg_match() devuelve 0 (falsy) cuando no hay coincidencia y false cuando hay un error (como un patrón mal formado). Usa el operador === cuando necesites distinguir esos dos casos.
Los Fundamentos de las Expresiones Regulares en PHP
Un patrón PHP es una cadena con el cuerpo del patrón envuelto en delimitadores (comúnmente /), seguido opcionalmente de modificadores:
Sintaxis de expresión regular en PHP
/pattern/modifiersDonde pattern es la secuencia de caracteres a coincidir, y modifiers son letras opcionales que alteran el comportamiento del patrón. Los modificadores más utilizados en PHP son:
i: Coincidencia sin distinción entre mayúsculas y minúsculas (/php/icoincide conPHP,Php,php).m: Modo multilínea —^y$coinciden al inicio/fin de cada línea, no solo de toda la cadena.s: Modo "dotall" —.también coincide con caracteres de nueva línea.u: Trata el patrón y el sujeto como UTF-8. Úsalo siempre que el texto pueda contener caracteres no ASCII.
Bloques de construcción de patrones comunes
Dentro del patrón en sí, un puñado de metacaracteres realizan la mayor parte del trabajo:
| Token | Significado |
|---|---|
\d \w \s | Un dígito, un carácter de palabra, un carácter de espacio en blanco |
. | Cualquier carácter individual (excepto nueva línea, a menos que s esté configurado) |
+ * ? | Uno-o-más, cero-o-más, cero-o-uno del token anterior |
{2,4} | Entre 2 y 4 repeticiones |
^ $ | Inicio y fin de la cadena (o línea en modo m) |
[abc] | Una clase de caracteres — cualquiera de a, b o c |
(...) | Un grupo de captura |
| | Alternancia — coincide con el patrón de cualquier lado |
Expresión regular PHP para reemplazar texto
Usar Expresiones Regulares en PHP para Validar Entradas de Usuario
Uno de los usos más comunes de las expresiones regulares en PHP es validar la entrada del usuario. Por ejemplo, puedes usar una expresión regular para asegurarte de que una dirección de correo electrónico introducida por el usuario tiene el formato correcto. El siguiente código demuestra cómo se puede hacer esto:
Expresión regular PHP para asegurarse de que una dirección de correo electrónico introducida por el usuario tiene el formato correcto
Nota: Aunque esta expresión regular funciona para validación básica, PHP proporciona la función integrada filter_var($email, FILTER_VALIDATE_EMAIL) para una validación de correo electrónico más robusta y conforme con RFC. Para flujos de trabajo de formularios completos, consulta PHP Form Validation.
Encontrar Todas las Coincidencias
Mientras que preg_match() se detiene en la primera coincidencia, preg_match_all() recopila cada coincidencia en un array. Esta es la herramienta para extraer datos repetidos, como cada palabra, número o etiqueta en una cadena.
Extraer cada número de una cadena
<?php
$text = "Room 12, floor 3, building 7";
$count = preg_match_all("/\d+/", $text, $matches);
echo $count; // Outputs: 3
print_r($matches[0]); // Outputs: Array ( [0] => 12 [1] => 3 [2] => 7 )
?>Dividir Cadenas
preg_split() divide una cadena en un array usando un patrón como delimitador. A diferencia de explode(), el delimitador puede variar — aquí dividimos cualquier secuencia de comas y espacios en blanco:
<?php
$csv = "apple, banana, cherry";
$fruits = preg_split("/[\s,]+/", $csv);
print_r($fruits);
// Outputs: Array ( [0] => apple [1] => banana [2] => cherry )
?>Técnicas Avanzadas para Expresiones Regulares en PHP
Una vez que los fundamentos son cómodos, estas técnicas te permiten escribir patrones expresivos y precisos.
Grupos de captura
Los paréntesis (...) capturan parte de una coincidencia para que puedas leerla del array $matches. El índice 0 contiene la coincidencia completa; el índice 1 y superiores contienen cada grupo.
Grupos nombrados
(?<name>...) le da a un grupo una etiqueta legible, para que puedas extraer valores por nombre en lugar de un índice numérico — mucho más claro para fechas, precios y otros datos estructurados.
<?php
$date = "2023-10-01";
preg_match("/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/", $date, $m);
echo $m["year"]; // Outputs: 2023
echo $m["month"]; // Outputs: 10
?>Alternancia
El operador | coincide con un patrón o con otro. El siguiente ejemplo coincide con cualquier animal que aparezca primero:
<?php
preg_match("/cat|dog|bird/", "I love cats", $m);
echo $m[0]; // Outputs: cat
?>Otros bloques de construcción
- Grupos de no captura —
(?:...)agrupan tokens (por ejemplo, para aplicar un cuantificador) sin almacenar la coincidencia, lo que mantiene limpio el array$matches. - Lookahead / lookbehind —
(?=...),(?!...),(?<=...),(?<!...)coinciden basándose en lo que viene antes o después de una posición sin consumirla. - Cuantificadores —
{n},{n,}y{n,m}coinciden con un conteo exacto o un rango de repeticiones, por ejemplo\d{4}para exactamente cuatro dígitos.
Cuando necesites hacer coincidir texto proporcionado por el usuario literalmente dentro de un patrón, pásalo primero por preg_quote() para que caracteres como . o * sean escapados en lugar de tratados como metacaracteres.
Temas Relacionados
- PHP RegEx (guía completa) — un recorrido más profundo por la sintaxis PCRE en PHP.
- PHP Strings — las funciones de cadena sin regex que las expresiones regulares complementan.
- PHP Form Validation — aplicar patrones a entradas de formularios reales.
Conclusión
Las expresiones regulares de PHP son una herramienta poderosa que puede ayudarte a lograr una amplia gama de tareas. Ya sea que estés validando entradas de usuario, buscando en texto o realizando manipulaciones complejas de cadenas, las expresiones regulares son una parte esencial del kit de herramientas del desarrollador PHP.