12-07-2026 2 min. de lectura (aproximado)
Expresiones regulares en PHP: guía completa y práctica (2 min. de lectura)
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