Tasche nelle sostituzioni con regex in PHP
Quando si lavora con la funzione preg_replace,
se mettiamo qualcosa in una tasca nella regex,
allora nella stringa di sostituzione possiamo inserire il contenuto
di questa tasca scrivendo il simbolo del dollaro $ e il numero
della tasca. Ad esempio, $0 - tasca zero,
$1 - prima tasca, $2 - seconda
tasca e così via.
A cosa serve e come usarlo vediamolo con degli esempi.
Esempio
Troviamo tutti i numeri e al loro posto inseriamo questi stessi numeri, ma tra parentesi graffe. Per fare questo sostituiremo tutti i numeri trovati con loro stessi, ma tra parentesi graffe:
<?php
$str = '1 23 456 xax';
$res = preg_replace('#(\d+)#', '{$1}', $str);
?>
Di conseguenza nella variabile verrà scritto quanto segue:
'{1} {23} {456} xax'
Esempio
Troviamo tutte le stringhe che rappresentano
numeri con delle 'x' attorno e sostituiamo questi
numeri con loro stessi, ma con dei segni '!' attorno:
<?php
$str = 'x1x x23x x456x xax';
$res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>
Di conseguenza nella variabile verrà scritto quanto segue:
'!1! !23! !456! xax'
Esempio
Risolviamo il seguente problema: date delle stringhe
del tipo 'aaa@bbb' - lettere, poi il simbolo @,
poi lettere. Dobbiamo scambiare le lettere
prima di '@' e dopo. Implementiamo:
<?php
$str = 'aaa@bbb ccc@ddd';
$res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str);
?>
Di conseguenza nella variabile verrà scritto quanto segue:
'bbb@aaa ddd@ccc'
Compiti pratici
Data una stringa:
<?php
$str = '12 34 56 78';
?>
Scambiate le cifre in tutti i numeri a due cifre.
Data una stringa con una data:
<?php
$str = '31.12.2025';
?>
Trasformate questa data in '2025.12.31'.