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