Reemplazar patrones de cadenas en Laravel: uso de replaceMatches
- Publicado el 31 diciembre, 2024
- Palabras: 120
Aprende a realizar reemplazos avanzados de patrones de cadenas en Laravel usando el método Str::replaceMatches. Exploremos reemplazos simples y patrones complejos con reemplazos basados en clousures.

#Uso básico
El método Str::replaceMatches reemplaza todas las partes de una cadena que coinciden con un patrón con la cadena de reemplazo dada. A continuación se muestra un reemplazo de patrón sencillo:
use IlluminateSupportStr;
$replaced = Str::replaceMatches(
pattern: '/[^A-Za-z0-9]++/',
replace: '',
subject: '(+1) 501-555-1000'
);
// Result: '15015551000'
#Usando clousures para reemplazos más complejos
El método replaceMatches también acepta un clousure que se invocará con cada porción de la cadena que coincida con el patrón dado, lo que le permite realizar la lógica de reemplazo dentro del cierre y devolver el valor reemplazado:
use IlluminateSupportStr;
$replaced = Str::replaceMatches('/d/', function (array $matches) {
return '['.$matches[0].']';
}, '123');
// '[1][2][3]'
#Ejemplo práctico
A continuación se explica cómo podría usarlo en un servicio de formateo de texto:
class TextFormatter
{
public function formatPhoneNumbers(string $text): string
{
return Str::replaceMatches(
'/(d{3})[s-]?(d{3})[s-]?(d{4})/',
fn($matches) => "({$matches[1]}) {$matches[2]}-{$matches[3]}",
$text
);
}
public function highlightKeywords(string $text, array $keywords): string
{
$pattern = '/(' . implode('|', array_map('preg_quote', $keywords)) . ')/i';
return Str::replaceMatches(
$pattern,
fn($matches) => '<mark>' . $matches[0] . '</mark>',
$text
);
}
public function cleanupMarkdown(string $markdown): string
{
// Remove extra spaces around bold/italic markers
return Str::replaceMatches(
'/s*([*_]{1,2})s*([^*_]+)s*([*_]{1,2})s*/',
fn($matches) => $matches[1] . $matches[2] . $matches[3],
$markdown
);
}
}
// Usage
$formatter = new TextFormatter();
$text = "Call me at 1234567890 or email at john@example.com";
echo $formatter->formatPhoneNumbers($text);
// "Call me at (123) 456-7890 or email at john@example.com"
$content = "Laravel is a web application framework.";
echo $formatter->highlightKeywords($content, ['Laravel', 'framework']);
// "<mark>Laravel</mark> is a web application <mark>framework</mark>."
$markdown = "This is **bold** and *italic* text";
echo $formatter->cleanupMarkdown($markdown);
// "This is **bold** and *italic* text"
El método replaceMatches proporciona una forma poderosa de realizar reemplazos de cadenas basados en patrones, ya sea que necesite sustituciones simples o transformaciones complejas utilizando devoluciones de llamadas de cierre.
Fuente: Harris Raftopoulos
Inicia la conversación
Hazte miembro de Antonio Jenaro para comenzar a comentar.
Regístrate ahora¿Ya estás registrado? Inicia sesión