Zachycení skupin při nahrazování pomocí regulárních výrazů v PHP
Při práci s funkcí preg_replace,
pokud něco zachytíme do skupiny v regulárním výrazu,
můžeme v řetězci pro nahrazení vložit obsah
této skupiny napsáním znaku dolaru $ a čísla
skupiny. Například, $0 - nultá skupina,
$1 - první skupina, $2 - druhá
skupina a tak dále.
K čemu je to užitečné a jak toho využívat si ukážeme na příkladech.
Příklad
Najděme všechna čísla a místo nich vložme stejná čísla, ale ve složených závorkách. K tomu všechna nalezená čísla budeme nahrazovat jimi samými, ale ve složených závorkách:
<?php
$str = '1 23 456 xax';
$res = preg_replace('#(\d+)#', '{$1}', $str);
?>
Výsledek zapsaný do proměnné bude následující:
'{1} {23} {456} xax'
Příklad
Najděme všechny řetězce, které představují
čísla obklopená 'x' a nahraďme tato
čísla jimi samými, ale s '!' znaky kolem:
<?php
$str = 'x1x x23x x456x xax';
$res = preg_replace('#x(\d+)x#', '!$1!', $str);
?>
Výsledek zapsaný do proměnné bude následující:
'!1! !23! !456! xax'
Příklad
Pojďme vyřešit následující úlohu: máme řetězce
tvaru 'aaa@bbb' - písmena, pak zavináč,
pak písmena. Je třeba prohodit písmena
před '@' a po. Realizujme:
<?php
$str = 'aaa@bbb ccc@ddd';
$res = preg_replace('#([a-z]+)@([a-z]+)#', '$2@$1', $str);
?>
Výsledek zapsaný do proměnné bude následující:
'bbb@aaa ddd@ccc'
Praktické úlohy
Je dán řetězec:
<?php
$str = '12 34 56 78';
?>
Prohoďte číslice ve všech dvouciferných číslech.
Je dán řetězec s datem:
<?php
$str = '31.12.2025';
?>
Převeďte toto datum na '2025.12.31'.