Карманы при замене через регулярки на PHP

При работе с функцией preg_replace, если мы что-то положим в карман в регулярке, то в строке замены мы можем вставить содержимое этого кармана написав знак доллара $ и номер кармана. Например, $0 - нулевой карман, $1 - первый карман, $2 - второй карман и так далее.

Зачем это нужно и как этим пользоваться давайте посмотрим на примерах.

Пример

Давайте найдем все числа и вместо них вставим эти же числа, но в фигурных скобках. Для этого все найденные числа мы будем заменять на них самих же, но в фигурных скобках:

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

В результате в переменную запишется следующее:

'{1} {23} {456} xax'

Пример

Давайте найдем все строки, представляющие собой числа с иксами вокруг и заменим эти числа на них же, но с '!' знаками вокруг:

<?php $str = 'x1x x23x x456x xax'; $res = preg_replace('#x(\d+)x#', '!$1!', $str); ?>

В результате в переменную запишется следующее:

'!1! !23! !456! xax'

Пример

Давайте решим следующую задачу: даны строки вида 'aaa@bbb' - буквы, потом собака, потом буквы. Нужно поменять местами буквы до '@' и после. Реализуем:

<?php $str = 'aaa@bbb ccc@ddd'; $res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str); ?>

В результате в переменную запишется следующее:

'bbb@aaa ddd@ccc'

Практические задачи

Дана строка:

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

Поменяйте местами цифры во всех двухзначных числах.

Дана строка с датой:

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

Преобразуйте эту дату в '2025.12.31'.