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:
<?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>";
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lección¿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.