Kieszenie w zamianach za pomocą wyrażeń regularnych w PHP

Podczas pracy z funkcją preg_replace, jeśli coś umieścimy w kieszeni w wyrażeniu regularnym, to w ciągu zastępczym możemy wstawić zawartość tej kieszeni pisząc znak dolara $ i numer kieszeni. Na przykład, $0 - kieszeń zerowa, $1 - pierwsza kieszeń, $2 - druga kieszeń i tak dalej.

Po co to jest potrzebne i jak z tego korzystać, przyjrzyjmy się na przykładach.

Przykład

Znajdźmy wszystkie liczby i zamiast nich wstawmy te same liczby, ale w nawiasach klamrowych. W tym celu wszystkie znalezione liczby będziemy zastępować nimi samymi, ale w nawiasach klamrowych:

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

W rezultacie do zmiennej zostanie zapisane następujące:

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

Przykład

Znajdźmy wszystkie ciągi znaków, reprezentujące liczby z iksami wokół i zamieńmy te liczby na nie same, ale z '!' znakami wokół:

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

W rezultacie do zmiennej zostanie zapisane następujące:

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

Przykład

Rozwiążmy następujące zadanie: dane są ciągi znaków typu 'aaa@bbb' - litery, potem małpa, potem litery. Należy zamienić miejscami litery przed '@' i po. Zrealizujmy:

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

W rezultacie do zmiennej zostanie zapisane następujące:

php'bbb@aaa ddd@ccc'

Zadania praktyczne

Задание 1

Dany jest ciąg znaków:

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

Zamień miejscami cyfry we wszystkich dwucyfrowych liczbach.

Задание 2

Dany jest ciąg znaków z datą:

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

Przekształć tę datę na '2025.12.31'.