Нечувајуће заграде у регуларним изразима у PHP-у

Заграде () обављају две функције - груписање симбола и функцију кармана. А шта да радимо ако желимо да груписемо, али да не смештамо у карман? За решавање таквог проблема креиране су специјалне нечувајуће заграде (?: ) - оне групису, али не смештају у карман.

Пример

У следећем примеру прве заграде су нам потребне за груписање, а друге - за карман. Међутим, обе заграде чувају податке у карман:

php<?php
  $str = 'abab123';
  $reg = '#(ab)+([1-9]+)#';
  preg_match_all($reg, $str, $res);
?>

Као резултат у нашим карманима ће бити следеће:

php<?php
  var_dump($res[0]); // исписаће 'abab123'
  var_dump($res[1]); // исписаће 'ab'
  var_dump($res[2]); // исписаће '123'
?>

Пример

Хајде да учинимо да први пар заграда само групише, али да не смешта у карман:

php<?php
  $str = 'abab123';
  $reg = '#(?:ab)+([1-9]+)#';
  preg_match_all($reg, $str, $res);
?>

Као резултат у првом карману ће бити наш број:

php<?php
  var_dump($res[1]); // исписаће '123'
?>

Практични задаци

Задание 1

Дате су подниске, подељене на два дела произвољним бројем парова $@:

php<?php
  $str = 'aaa$@bbb aaa$@$@bbb aaa$@$@$@bbb';
?>

Пронађите сваку од таквих подниски и за сваку пронађену подниску сместите у први карман оно што стоји пре раздвајача, а у други карман - оно што стоји после раздвајача.