Les références (captures) dans les remplacements via les expressions régulières en PHP
Lorsque l'on travaille avec la fonction preg_replace,
si nous capturons quelque chose dans l'expression régulière,
alors dans la chaîne de remplacement, nous pouvons insérer le contenu
de cette capture en écrivant le signe dollar $ et le numéro
de la référence. Par exemple, $0 - la référence zéro (la correspondance totale),
$1 - la première référence, $2 - la deuxième
référence et ainsi de suite.
Voyons à quoi cela sert et comment l'utiliser à l'aide d'exemples.
Exemple
Trouvons tous les nombres et remplaçons-les par ces mêmes nombres, mais entre accolades. Pour cela, nous allons remplacer tous les nombres trouvés par eux-mêmes, mais entre accolades :
<?php
$str = '1 23 456 xax';
$res = preg_replace('#(\d+)#', '{$1}', $str);
?>
En conséquence, la variable contiendra ce qui suit :
'{1} {23} {456} xax'
Exemple
Trouvons toutes les chaînes représentant
des nombres entourés de 'x' et remplaçons ces
nombres par eux-mêmes, mais entourés de '!' :
<?php
$str = 'x1x x23x x456x xax';
$res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>
En conséquence, la variable contiendra ce qui suit :
'!1! !23! !456! xax'
Exemple
Résolvons le problème suivant : on donne des chaînes
de la forme 'aaa@bbb' - des lettres, puis un arobase,
puis des lettres. Il faut inverser les lettres
avant '@' et après. Implémentons :
<?php
$str = 'aaa@bbb ccc@ddd';
$res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str);
?>
En conséquence, la variable contiendra ce qui suit :
'bbb@aaa ddd@ccc'
Tâches pratiques
Soit une chaîne :
<?php
$str = '12 34 56 78';
?>
Inversez les chiffres dans tous les nombres à deux chiffres.
Soit une chaîne avec une date :
<?php
$str = '31.12.2025';
?>
Transformez cette date en '2025.12.31'.