Групе у регуларном изразу у 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';
?>
Пронађите све подстрингове, у којима се налазе две исте речи једна за другом.