Grupuri de captură în înlocuirea cu expresii regulate în PHP
Când lucrăm cu funcția preg_replace,
dacă plasăm ceva într-un grup de captură în expresia regulată,
atunci în șirul de înlocuire putem insera conținutul
acestui grup de captură scriind semnul dolar $ și numărul
grupului. De exemplu, $0 - grupul zero,
$1 - primul grup, $2 - al doilea
grup și așa mai departe.
De ce este nevoie de aceasta și cum să o folosim, să vedem cu exemple.
Exemplul
Să găsim toate numerele și în locul lor să inserăm aceleași numere, dar între acolade. Pentru aceasta toate numerele găsite le vom înlocui cu ele însele, dar între acolade:
<?php
$str = '1 23 456 xax';
$res = preg_replace('#(\d+)#', '{$1}', $str);
?>
Ca rezultat, în variabilă se va scrie următorul:
'{1} {23} {456} xax'
Exemplul
Să găsim toate șirurile care reprezintă
numere înconjurate de 'x' și să înlocuim aceste
numere cu ele însele, dar înconjurate de semne '!':
<?php
$str = 'x1x x23x x456x xax';
$res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>
Ca rezultat, în variabilă se va scrie următorul:
'!1! !23! !456! xax'
Exemplul
Să rezolvăm următoarea problemă: sunt date șiruri
de forma 'aaa@bbb' - litere, apoi caracterul '@',
apoi litere. Trebuie să schimbăm locurile literelor
de dinainte de '@' cu cele de după. Să implementăm:
<?php
$str = 'aaa@bbb ccc@ddd';
$res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str);
?>
Ca rezultat, în variabilă se va scrie următorul:
'bbb@aaa ddd@ccc'
Probleme practice
Este dat șirul:
<?php
$str = '12 34 56 78';
?>
Schimbați locurile cifrelor în toate numerele din două cifre.
Este dat șirul cu o dată:
<?php
$str = '31.12.2025';
?>
Transformați această dată în '2025.12.31'.