1
<?php
$informe = <<<TEXTO
Transacciones del día:
- Cobro de suscripción: $149.00 facturado con éxito.
- Reembolso de garantía: EUR 45.00 acreditado.
- Bono promocional: $500.00 aplicado a cuenta.
- Identificador de registro interno: #149 no es un precio.
TEXTO;
// 1. Lookbehind Positivo: busca números decimales precedidos exactamente por '$'
// El signo '$' se evalúa pero NO forma parte del resultado capturado
$patronPreciosUSD = '/(?<=\$)\d+(?:\.\d{2})?/';
// 2. Lookahead Positivo: busca palabras que terminen antes de "facturado"
$patronEstado = '/\b[a-zA-Záéíóúñ]+\b(?=\s+facturado)/iu';
echo "<div style='font-family:system-ui; max-width:640px; padding:15px;'>";
echo "<h3 style='color:#0f172a; margin-top:0;'>👁️ Aserciones Lookaround en Acción</h3>";
// Extracción 1
preg_match_all($patronPreciosUSD, $informe, $precios);
echo "<div style='background:#ecfdf5; border:1px solid #10b981; border-radius:8px; padding:12px; margin-bottom:12px;'>";
echo " <strong style='color:#065f46;'>1. Precios en USD extraídos con Lookbehind (?<=\\$):</strong><br>";
echo " <span style='color:#64748b; font-size:12px;'>Extrae el valor numérico puro sin el símbolo de moneda:</span>";
echo " <div style='margin-top:6px;'>";
foreach ($precios[0] as $precio) {
echo " <span style='background:#ffffff; color:#047857; font-family:monospace; font-weight:bold; padding:3px 8px; border-radius:4px; margin-right:6px;'>$precio</span>";
}
echo " </div>";
echo "</div>";
// Extracción 2
preg_match($patronEstado, $informe, $accion);
echo "<div style='background:#f0f9ff; border:1px solid #0284c7; border-radius:8px; padding:12px;'>";
echo " <strong style='color:#0369a1;'>2. Acción previa con Lookahead (?=\\s+facturado):</strong><br>";
echo " <span style='color:#64748b; font-size:12px;'>Palabra inmediatamente anterior a 'facturado':</span><br>";
echo " <code style='background:#ffffff; color:#0284c7; font-weight:bold; padding:4px 8px; border-radius:4px; display:inline-block; margin-top:4px;'>" . ($accion[0] ?? 'No encontrado') . "</code>";
echo "</div>";
echo "</div>";
Haz clic para editar este código