EXPRESIONES REGULARES EN PHP: GUÍA COMPLETA Y PRÁCTICA
Las expresiones regulares, regex o regexp, son una herramienta poderosa para trabajar con texto en PHP. Permiten buscar, validar, extraer y reemplazar patrones complejos de forma eficiente. PHP las implementa a través de la librería PCRE, Perl Compatible Regular Expressions, accesible mediante las funciones "preg_*".
Sintaxis básica
Una expresión regular se delimita generalmente con delimitadores, el más común es "/":
$patron = '/expresión regular/aquí';
Metacaracteres principales
| Metacarácter |
Descripción |
Ejemplo |
| "." |
Cualquier carácter (excepto salto de línea) |
"/h.o/" -> hola, hero |
| "^" |
Inicio de la cadena |
"/^Hola/" |
| "$" |
Fin de la cadena |
"/mundo$/" |
| "\d" |
Dígito [0-9] |
"/\d{3}/" |
| "\w" |
Caracter alfanumérico + guion bajo |
"/\w+/" |
| "\s" |
Espacio en blanco |
"/\s+/" |
| "\b" |
Límite de palabra |
"/\bPHP\b/" |
| "[]" |
Clase de caracteres |
"/[a-zA-Z]/" |
| "()" |
Grupo de captura |
"/(\d{2})-(\d{2})/" |
| "|" |
Alternativa (OR) |
"/gato|perro/" |
| "?" |
0 o 1 vez |
"/colou?r/" |
| "*" |
0 o más veces |
"/a*/" |
| "+" |
1 o más veces |
"/a+/" |
| "{n}" |
Exactamente n veces |
"/\d{4}/" |
| "{n,m}" |
Entre n y m veces |
"/\d{2,4}/" |
Funciones principales de PHP
"preg_match()" Buscar coincidencia
$texto = "Mi email es contacto@ejemplo.com";
$patron = '/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/';
if (preg_match($patron, $texto, $coincidencias)) {
echo "Email encontrado: " . $coincidencias[0];
}
"preg_match_all()" Encontrar todas las coincidencias
$texto = "Precios: 19.99, 45 y 120.50";
preg_match_all('/\d+\.?\d*/', $texto, $matches);
print_r($matches[0]);
// Array ( [0] => 19.99 [1] => 45 [2] => 120.50 )
"preg_split()" Dividir cadena
$texto = "PHP, es genial; Python también";
$palabras = preg_split('/[\s,;]+/', $texto);
print_r($palabras);
"preg_quote()" Escapar caracteres especiales
Muy útil cuando el patrón viene de usuario:
$buscar = preg_quote($usuarioInput, '/');
$patron = "/$buscar/i";
Modificadores o flags más usados
Se añaden después del delimitador final:
- "i": Insensible a mayúsculas/minúsculas
- "m": Multilínea ("^" y "$" actúan por línea)
- "s":"." coincide con saltos de línea)
- "u": UTF-8, importante para acentos y emojis
- "x": Ignorar espacios y comentarios en el patrón
Ejemplo:
preg_match('/patrón/imu', $texto);
Ejemplos prácticos reales
Extraer URLs
$patron = '#https?://[^\s<>"\']+#i';
preg_match_all($patron, $texto, $urls);
Validar teléfono español
$patron = '/^(\+34|0034)?[6-9]\d{8}$/';
Grupos de captura y referencias
$fecha = "2026-07-12";
$patron = '/(\d{4})-(\d{2})-(\d{2})/';
preg_match($patron, $fecha, $matches);
// $matches[1] = año, [2] = mes, [3] = día
// Reemplazar invirtiendo formato
echo preg_replace($patron, '$3/$2/$1', $fecha); // 12/07/2026