Capturas en reemplazos con expresiones regulares en PHP
Al trabajar con la función preg_replace,
si capturamos algo en la expresión regular,
en la cadena de reemplazo podemos insertar el contenido
de esa captura escribiendo el signo de dólar $ y el número
de la captura. Por ejemplo, $0 - captura cero,
$1 - primera captura, $2 - segunda
captura y así sucesivamente.
Para qué sirve esto y cómo usarlo vamos a verlo con ejemplos.
Ejemplo
Encontremos todos los números y en su lugar insertemos esos mismos números, pero entre llaves. Para esto todos los números encontrados los reemplazaremos por ellos mismos, pero entre llaves:
<?php
$str = '1 23 456 xax';
$res = preg_replace('#(\d+)#', '{$1}', $str);
?>
Como resultado en la variable se guardará lo siguiente:
'{1} {23} {456} xax'
Ejemplo
Encontremos todas las cadenas que representen
números con 'x' alrededor y reemplacemos esos
números por ellos mismos, pero con '!' signos alrededor:
<?php
$str = 'x1x x23x x456x xax';
$res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>
Como resultado en la variable se guardará lo siguiente:
'!1! !23! !456! xax'
Ejemplo
Resolvamos el siguiente problema: dadas cadenas
de la forma 'aaa@bbb' - letras, luego arroba,
luego letras. Necesitamos intercambiar las letras
antes de '@' y después. Implementemos:
<?php
$str = 'aaa@bbb ccc@ddd';
$res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str);
?>
Como resultado en la variable se guardará lo siguiente:
'bbb@aaa ddd@ccc'
Tareas prácticas
Dada la cadena:
<?php
$str = '12 34 56 78';
?>
Intercambie los dígitos en todos los números de dos dígitos.
Dada la cadena con fecha:
<?php
$str = '31.12.2025';
?>
Convierta esta fecha a '2025.12.31'.