Групи при замяна чрез регулярни изрази в PHP
При работа с функцията preg_replace,
ако сложим нещо в група в регулярния израз,
тогава в низа за замяна можем да вмъкнем съдържанието
на тази група като напишем знака долар $ и номера
на групата. Например, $0 - нулева група,
$1 - първа група, $2 - втора
група и така нататък.
Защо е необходимо това и как да го използваме, нека разгледаме с примери.
Пример
Нека да намерим всички числа и вместо тях да вмъкнем същите те числа, но в къдрави скоби. За целта всички намерени числа ще заменим с тях самите, но в къдрави скоби:
<?php
$str = '1 23 456 xax';
$res = preg_replace('#(\d+)#', '{$1}', $str);
?>
В резултат във променливата ще бъде записано следното:
'{1} {23} {456} xax'
Пример
Нека да намерим всички низове, представляващи
числа с 'x' около тях и заменим тези
числа със същите, но с '!' знаци около тях:
<?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'.