Tema 11 · Callbacks

Función preg_replace_callback(): Transformaciones Dinámicas y Cálculos

Aplica lógica PHP avanzada durante el reemplazo mediante funciones anónimas o flecha: formateo de precios, censura inteligente y conversiones matemáticas.

¿Por qué preg_replace_callback()?

Con preg_replace() estándar, el valor de reemplazo es una cadena fija (con o sin backreferences como $1). Pero, ¿qué ocurre si necesitas calcular un valor, consultar una base de datos, convertir una divisa o formatear dinámicamente cada resultado coincidente?

Para estos escenarios existe preg_replace_callback(). En lugar de recibir una cadena de sustitución, recibe una función anónima (o arrow function) que se ejecuta una vez por cada coincidencia encontrada, pasándole el array $matches como argumento.

string preg_replace_callback(string|array $pattern, callable $callback, string|array $subject, int $limit = -1, int &$count = null)

La Función preg_replace_callback_array()

Introducida en PHP 7, preg_replace_callback_array() permite asociar múltiples expresiones regulares con sus respectivos callbacks independientes en un solo array asociativo ['patrón' => callable], procesando el texto en una única pasada sumamente rápida y limpia.

⚡ Conversor de Monedas y Censura con preg_replace_callback()

Ejemplo interactivo. Convertimos automáticamente todos los precios en dólares (USD) a pesos colombianos (COP) aplicando la tasa de cambio vigente:

callback_precios.php
Solo lectura
<?php
$descripcionPresupuesto = <<<TEXTO
Plan de Inversión Tecnológica:
- Servidor Cloud Dedicado: $120.00 USD mensuales.
- Licencia de Base de Datos Enterprise: $450.50 USD anuales.
- Certificado SSL Wildcard: $80.00 USD pago único.
- Dominio .com corporativo: $15.00 USD por año.
TEXTO;

// Tasa de cambio simulada: 1 USD = 4,100 COP
$tasaCambio = 4100.0;

// Patrón que captura el monto numérico en dólares
$patronDolares = '/\$([\d,]+(?:\.\d{2})?)\s+USD/i';

echo "<div style='font-family:system-ui; max-width:640px; padding:15px;'>";
echo "<h3 style='color:#0f172a; margin-top:0;'>💱 Conversor Automático de Precios</h3>";
echo "<p style='color:#64748b; font-size:13px;'>Tasa aplicada: <strong>1 USD = $" . number_format($tasaCambio, 0) . " COP</strong></p>";

// preg_replace_callback() calcula el valor en pesos para cada coincidencia en vivo
$textoConvertido = preg_replace_callback($patronDolares, function ($matches) use ($tasaCambio) {
    // $matches[1] contiene el número en dólares (ej: "120.00")
    $dolares = (float)str_replace(',', '', $matches[1]);
    $pesos = $dolares * $tasaCambio;
    
    // Retornamos la nueva etiqueta con ambos valores formateados
    return "<strong style='color:#059669;'>$" . number_format($pesos, 0, ',', '.') . " COP</strong> <small style='color:#94a3b8;'>($" . number_format($dolares, 2) . " USD)</small>";
}, $descripcionPresupuesto);

echo "<div style='background:#f8fafc; border:1px solid #cbd5e1; border-radius:8px; padding:15px; font-size:14px; line-height:1.7;'>";
echo nl2br($textoConvertido);
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
¿Qué argumento recibe la función callback en preg_replace_callback()?
🦉
¿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.