Ce face preg_replace_callback
Când textul de înlocuire trebuie calculat (un preț convertit, o valoare luată dintr-un tablou, un cuvânt transformat), preg_replace nu este suficientă. preg_replace_callback apelează funcția ta pentru fiecare potrivire și pune în text ce returnează aceasta.
Funcția primește tabloul potrivirii: $m[0] întreaga potrivire, $m[1], $m[2]… grupurile. Trebuie să returneze un text.
Parametri
| Parametru | Descriere |
|---|---|
$pattern |
Expresia regulată (sau un tablou de expresii). |
$callback |
Funcția apelată pentru fiecare potrivire. Primește tabloul potrivirii și returnează textul nou. |
$subject |
Textul în care se face înlocuirea. |
$limit |
Opțional. Numărul maxim de înlocuiri. |
$count |
Opțional. Variabilă în care se salvează numărul de înlocuiri. |
$flags |
Opțional. De exemplu PREG_OFFSET_CAPTURE. |
Ce returnează
Textul nou sau null la eroare.
Exemple
Exemplul 1: Șablon cu variabile
Variabilele care lipsesc din tablou rămân neschimbate.
<?php
$date = ["nume" => "Ana", "oras" => "Iași"];
$sablon = "Salut {nume}! Livrăm în {oras} în {zile} zile.";
echo preg_replace_callback('/\{(\w+)\}/', fn($m) => $date[$m[1]] ?? $m[0], $sablon);
Rezultat
Salut Ana! Livrăm în Iași în {zile} zile.
Exemplul 2: Prețuri convertite din euro în lei
<?php
$text = "Abonament: 10 EUR pe lună, 100 EUR pe an.";
$curs = 4.97;
echo preg_replace_callback(
'/(\d+(?:\.\d+)?) EUR/',
fn($m) => number_format($m[1] * $curs, 2, ",", ".") . " lei",
$text
);
Rezultat
Abonament: 49,70 lei pe lună, 497,00 lei pe an.
Greșeli frecvente
- Funcția ta nu returnează nimic (uiți
return) și potrivirile dispar din text, pentru că sunt înlocuite cu un text gol.
Comenzi înrudite
preg_replace: Înlocuiește toate potrivirile unei expresii regulate cu alt text.preg_match_all: Găsește toate potrivirile unei expresii regulate într-un text și le pune într-un tablou.array_map: Aplică o funcție pe fiecare element al unui tablou și returnează tabloul cu rezultatele.