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<?php
  $str = '1 23 456 xax';
  $res = preg_replace('#(\d+)#', '{$1}', $str);
?>

Como resultado en la variable se guardará lo siguiente:

php'{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<?php
  $str = 'x1x x23x x456x xax';
  $res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>

Como resultado en la variable se guardará lo siguiente:

php'!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<?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:

php'bbb@aaa ddd@ccc'

Tareas prácticas

Задание 1

Dada la cadena:

php<?php
  $str = '12 34 56 78';
?>

Intercambie los dígitos en todos los números de dos dígitos.

Задание 2

Dada la cadena con fecha:

php<?php
  $str = '31.12.2025';
?>

Convierta esta fecha a '2025.12.31'.