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
$str = '1 23 456 xax';
$res = preg_replace('#(\d+)#', '{$1}', $str);
?>
W rezultacie do zmiennej zostanie zapisane następujące:
'{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
$str = 'x1x x23x x456x xax';
$res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>
W rezultacie do zmiennej zostanie zapisane następujące:
'!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
$str = 'aaa@bbb ccc@ddd';
$res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str);
?>
W rezultacie do zmiennej zostanie zapisane następujące:
'bbb@aaa ddd@ccc'
Zadania praktyczne
Dany jest ciąg znaków:
<?php
$str = '12 34 56 78';
?>
Zamień miejscami cyfry we wszystkich dwucyfrowych liczbach.
Dany jest ciąg znaków z datą:
<?php
$str = '31.12.2025';
?>
Przekształć tę datę na '2025.12.31'.