Expresiones regulares en PHP con ejemplos: en la práctica
Las expresiones regulares (regex) son una herramienta poderosa para buscar, reemplazar y analizar texto. En PHP se implementan a través del conjunto de funciones PCRE (Perl Compatible Regular Expressions). Sin ellas es difícil imaginar la validación de formularios, el análisis de registros o el reemplazo de patrones en cadenas.
En este artículo analizaremos expresiones regulares en PHP con ejemplos que podrás aplicar de inmediato en tus proyectos. No profundizaremos en teoría — solo práctica, código y escenarios reales.
1. Funciones principales para trabajar con regex en PHP
En PHP hay tres funciones clave que cubren el 95% de las tareas:
preg_match()— búsqueda de la primera coincidencia.preg_match_all()— búsqueda de todas las coincidencias.preg_replace()— reemplazo según patrón.preg_split()— división de cadena según patrón.
Todas las funciones requieren tres parámetros: patrón (pattern), cadena (subject) y banderas opcionales.
Ejemplo 1: Validación de email
<?php$email = "user@example.com";$pattern = "/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/";
if (preg_match($pattern, $email)) { echo "Email correcto";} else { echo "Email incorrecto";}?>Analicemos el patrón: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/
^— inicio de la cadena.[a-zA-Z0-9._%+-]+— uno o más caracteres permitidos.@— literalmente el símbolo @.[a-zA-Z0-9.-]+— nombre de dominio.\\.— punto (escapado).[a-zA-Z]{2,}— zona de dominio (mínimo 2 letras).$— final de la cadena.
Ejemplo 2: Extraer todos los enlaces de HTML
<?php$html = '<a href="https://pythonlib.ru">Sitio</a> y <a href="/about">Sobre nosotros</a>';$pattern = '/href="([^"]+)"/';
preg_match_all($pattern, $html, $matches);
print_r($matches[1]); // Mostrará el array de enlaces?>Aquí ([^"]+) es un grupo de captura que busca todo excepto comillas, dentro del atributo href.
2. Modificadores y su aplicación práctica
Los modificadores cambian el comportamiento de la expresión regular. Se colocan después de la barra de cierre (/).
i— búsqueda sin distinción de mayúsculas/minúsculas.m— modo multilínea (^ y $ funcionan para cada línea).s— el punto incluye saltos de línea.U— modo perezoso (por defecto es codicioso).u— soporte UTF-8.
Ejemplo 3: Búsqueda de palabra sin distinción de mayúsculas/minúsculas
<?php$text = "PHP es un lenguaje potente. php se usa en todas partes.";$pattern = "/php/i";
preg_match_all($pattern, $text, $matches);echo count($matches[0]); // Mostrará 2?>Ejemplo 4: Trabajo con cirílico (UTF-8)
<?php$text = "¡Hola, mundo!";$pattern = "/[а-яё]+/ui"; // u — UTF-8, i — sin distinción mayúsculas/minúsculas
preg_match_all($pattern, $text, $matches);print_r($matches[0]); // ['Hola', 'mundo']?>Sin el modificador u, el cirílico se procesará incorrectamente, porque PHP trata cada byte como un carácter individual.
3. Reemplazo y división de cadenas con expresiones regulares
La función preg_replace() permite reemplazar partes de una cadena según un patrón. Y preg_split() divide una cadena como explode, pero con la posibilidad de usar una expresión regular.
Ejemplo 5: Limpiar texto de etiquetas HTML
<?php$html = "<h1>Título</h1><p>Texto con palabra <b>en negrita</b></p>";$clean = preg_replace("/<[^>]+>/", "", $html);echo $clean; //