Tema 10 · Sustitución

Función preg_replace(): Sustituciones, Backreferences y Slugs

Reemplaza texto dinámicamente con preg_replace(), reutiliza grupos capturados con backreferences ($1, $2) y genera slugs limpios para URLs amigables.

¿Qué hace preg_replace()?

La función preg_replace() busca todas las apariciones de un patrón de expresión regular dentro de una cadena de texto y las reemplaza por un nuevo valor especificado.

string|array|null preg_replace(string|array $pattern, string|array $replacement, string|array $subject, int $limit = -1, int &$count = null)

Soporta procesar tanto cadenas individuales como arrays completos en una sola llamada de alto rendimiento.

Referencias Hacia Atrás (Backreferences: $1, $2)

La verdadera potencia de preg_replace() radica en que la cadena de reemplazo puede hacer referencia a los valores capturados por los grupos entre paréntesis (...) del patrón:

  • $0 (o \0): Inserta la coincidencia completa encontrada.
  • $1 (o \1): Inserta el valor capturado por el primer grupo entre paréntesis.
  • $2 (o \2): Inserta el valor capturado por el segundo grupo, y así sucesivamente.
Ejemplo Típico: Reordenar Formato de Fechas

Transformar fechas de formato ISO YYYY-MM-DD a formato latinoamericano DD/MM/YYYY:
$nueva = preg_replace('/^(\d{4})-(\d{2})-(\d{2})$/', '$3/$2/$1', '2026-11-09'); // Produce "09/11/2026"

Generación de Slugs Limpios para URLs Amigables

En cualquier plataforma de contenidos o comercio electrónico, los títulos introducidos por usuarios contienen espacios, caracteres especiales y puntuación. Mediante una secuencia de preg_replace(), podemos convertir "¡Oferta Especial: Laptop Gamer Pro (2026)!" en oferta-especial-laptop-gamer-pro-2026.

⚡ Generador Profesional de Slugs con preg_replace() en PHP

Ejemplo interactivo. Limpiamos títulos arbitrarios convirtiéndolos en URLs semánticas limpias mediante sustitución por expresiones regulares:

generador_slugs.php
Solo lectura
<?php
function crearSlugAmigable(string $titulo): string
{
    // 1. Convertir a minúsculas en UTF-8
    $slug = mb_strtolower(trim($titulo), 'UTF-8');

    // 2. Transliterar caracteres acentuados básicos del español
    $acentos = ['á' => 'a', 'é' => 'e', 'í' => 'i', 'ó' => 'o', 'ú' => 'u', 'ñ' => 'n'];
    $slug = strtr($slug, $acentos);

    // 3. Reemplazar cualquier carácter que NO sea letra o número por un guion
    $slug = preg_replace('/[^a-z0-9]+/i', '-', $slug);

    // 4. Eliminar guiones duplicados consecutivos (ej: '---' pasa a '-')
    $slug = preg_replace('/-+/', '-', $slug);

    // 5. Eliminar guiones sobrantes al inicio o al final
    return trim((string)$slug, '-');
}

$titulosPrueba = [
    "¡Aprende Programación Orientada a Objetos en PHP 8.3!",
    "Descuento del 50% en Hosting SSD (Solo por hoy)",
    "¿Cómo usar Docker, Kubernetes & CI/CD en 2026?",
    "   Espacios   extraños  y  símbolos: @#$%&*   "
];

echo "<div style='font-family:system-ui; max-width:640px; padding:15px;'>";
echo "<h3 style='color:#0f172a; margin-top:0;'>🔗 Generador de Slugs con preg_replace()</h3>";

foreach ($titulosPrueba as $titulo) {
    $slugGenerado = crearSlugAmigable($titulo);
    
    echo "<div style='background:#f8fafc; border:1px solid #cbd5e1; border-radius:6px; padding:10px 14px; margin-bottom:10px;'>";
    echo "  <div style='color:#64748b; font-size:12px;'>Título Original:</div>";
    echo "  <div style='color:#1e293b; font-weight:600; font-size:14px;'>" . htmlspecialchars($titulo) . "</div>";
    echo "  <div style='margin-top:6px; color:#0284c7; font-family:monospace; font-size:13px;'>";
    echo "    <strong>URL Slug:</strong> https://kilopolis.com/articulos/<span style='background:#e0f2fe; padding:2px 6px; border-radius:4px; font-weight:bold;'>$slugGenerado</span>";
    echo "  </div>";
    echo "</div>";
}

echo "</div>";
Pruébalo tú mismo » Se abre en una nueva pestaña con ejecución en vivo
🧠
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lección
1 Pregunta
Pregunta 1
En el segundo parámetro de preg_replace(), ¿qué representa la notación "$1"?
🦉
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.

🚀 ¿Quieres dominar Regex en PHP: Expresiones Regulares & PCRE y crear proyectos reales?

Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.

🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.