Групи во регуларниот израз во PHP
Содржината на групите е достапна не само во низата за замена, туку и во самиот регуларен израз: ние можеме да ставиме нешто во група, а потоа директно во регуларниот израз да кажеме дека овде треба да стои содржината на таа група.
Содржината на групите е достапна преку нивните броеви,
пред кои стои обратна коса црта. На пример,
нултата група ќе биде достапна вака: \0,
првата група вака - \1, втората
- \2 и така натаму.
Сигурен сум дека сè напишано погоре досега е многу нејасно за вас. Тоа не е чудно, бидејќи групите се најмалку разбирливото место на регуларните изрази. Ајде да разбереме преку примери.
Пример
Нека имаме вакава низа:
<?php
$str = 'aa bb cd ef';
?>
Ајде да ги најдеме во неја сите места во кои стојат две какви било исти букви една по друга. За решавање на задачата ќе бараме каква било буква, ќе ја ставиме во група, а потоа ќе провериме дали како следен симбол доаѓа содржината на таа група:
<?php
$res = preg_replace('#([a-z])\1#', '!', $str);
?>
Како резултат во променливата ќе се запише следново:
'! ! cd ef'
Пример
Нека имаме вакава низа:
<?php
$str = 'asxca buzxb csgd';
?>
Ајде да ги најдеме во неја сите зборови во кои се исти првата и последната буква. За решавање на задачата ќе напишеме следна шаблон: буква, потоа уште една или повеќе букви, а потоа таква иста буква како првата:
<?php
$res = preg_replace('#([a-z])[a-z]+\1#', '!', $str);
?>
Како резултат во променливата ќе се запише следново:
'! ! csgd'
Пример
Наместо \1 може да се пишува \g1:
<?php
$res = preg_replace('#([a-z])[a-z]+\g1#', '!', $str);
?>
Пример
Може исто така да се пишува \g{1}:
<?php
$res = preg_replace('#([a-z])[a-z]+\g{1}#', '!', $str);
?>
Пример
Во кадрави загради може да се наведат негативни броеви. Во овој случај групите ќе се бројат од крајот:
<?php
$res = preg_replace('#([a-z])([a-z])\g{-2}#', '!', $str);
?>
Практични задачи
Дадена е низа:
<?php
$str = 'aaa bbb ccc xyz';
?>
Најдете ги сите поднизи во кои има три исти букви една по друга.
Дадена е низа:
<?php
$str = 'a aa aaa abab bbbb';
?>
Најдете ги сите поднизи во кои има две или повеќе исти букви една по друга.
Дадена е низа:
<?php
$str = 'aaa aaa bbb bbb ccc ddd';
?>
Најдете ги сите поднизи во кои има два исти збора еден по друг.