Expresiones regulares en PHP con ejemplos: en la práctica

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Expresiones regulares en PHP: de la teoría a la práctica

\n\n

Las expresiones regulares (regex o regexp) son una herramienta poderosa para buscar, reemplazar y verificar cadenas según un patrón determinado. En PHP, se implementan a través del conjunto de funciones PCRE (Perl Compatible Regular Expressions) y permiten resolver tareas de cualquier complejidad: desde la validación de correos electrónicos hasta el análisis de código HTML. En este artículo, analizaremos la sintaxis, las funciones principales y veremos ejemplos prácticos que serán útiles para todo desarrollador PHP.

\n\n

1. Fundamentos de la sintaxis de las expresiones regulares en PHP

\n\n

Cualquier expresión regular en PHP se encierra entre delimitadores (generalmente barras /). Después del delimitador de cierre se pueden especificar modificadores: banderas que cambian el comportamiento de la búsqueda.

\n\n
$pattern = '/patrón/modificadores';
\n\n

Metacaracteres principales:

\n
    \n
  • . — cualquier carácter individual (excepto salto de línea)
  • \n
  • * — cero o más repeticiones del carácter anterior
  • \n
  • + — una o más repeticiones
  • \n
  • ? — cero o una repetición (hace que el cuantificador sea perezoso)
  • \n
  • ^ — inicio de la cadena
  • \n
  • $ — final de la cadena
  • \n
  • \\d — dígito (0-9)
  • \n
  • \\w — letra, dígito o guion bajo
  • \n
  • \\s — carácter de espacio en blanco
  • \n
  • [] — clase de caracteres (por ejemplo, [a-z])
  • \n
  • () — grupo de captura
  • \n
\n\n

Modificadores populares:

\n
    \n
  • i — búsqueda sin distinción de mayúsculas/minúsculas
  • \n
  • m — modo multilínea (^ y $ funcionan para cada línea)
  • \n
  • u — soporte UTF-8 (obligatorio para cirílico)
  • \n
  • s — el punto también captura saltos de línea
  • \n
\n\n

2. Función preg_match(): búsqueda de coincidencias

\n\n

preg_match() es la función más popular. Verifica si la cadena coincide con el patrón y devuelve 1 (hay coincidencia) o 0 (no hay). El tercer parámetro es un array donde se almacenan las coincidencias encontradas.

\n\n

Ejemplo 1. Validación de dirección de correo electrónico

\n
<?php\n$email = "user@example.com";\n$pattern = '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/';\n\nif (preg_match($pattern, $email)) {\n    echo "Email válido";\n} else {\n    echo "Email no válido";\n}\n// Salida: Email válido\n?>
\n\n

Ejemplo 2. Extracción de datos de una cadena

\n
<?php\n$text = "Mi número: +7 (999) 123-45-67";\n$pattern = '/\\+7\\s*\\(\\d{3}\\)\\s*\\d{3}-\\d{2}-\\d{2}/u';\n\nif (preg_match($pattern, $text, $matches)) {\n    echo "Número encontrado: " . $matches[0];\n}\n// Salida: Número encontrado: +7 (999) 123-45-67\n?>
\n\n

Nota: el modificador u es obligatorio si la cadena contiene cirílico o caracteres especiales Unicode.

\n\n

3. Función preg_replace(): reemplazo según patrón

\n\n

preg_replace() busca en la cadena todas las coincidencias con el patrón y las reemplaza con el texto especificado. Se pueden usar grupos de captura $1, $2, etc., para insertar partes del texto original.

\n\n

Ejemplo 3. Formateo de número de teléfono

\n
<?php\n$phone = "89991234567";\n$pattern = '/(\\d{1})(\\d{3})(\\d{3})(\\d{2})(\\d{2})/';\n$replacement = '+7 ($2) $3-$4-$5';\n\n$formatted = preg_replace($pattern, $replacement, $phone);\necho $formatted; // +7 (999) 123-45-67\n?>
\n\n

Ejemplo 4. Limpieza de HTML de etiquetas (excepto las permitidas)

\n
<?php\n$html = "<b>Negrita</b> <script>alert('xss')</script> texto";\n$pattern = '/<\\s*\\/?\\s*(?!b|i|u|a\\b)[^>]*>/ui';\n\n$clean = preg_replace($pattern, '', $html);\necho $clean; // <b>Negrita</b>  texto\n?><                

Blogs

Book Recommendations