Нечувајуће заграде у регуларним изразима у PHP-у
Заграде () обављају две функције -
груписање симбола и функцију кармана. А
шта да радимо ако желимо да груписемо,
али да не смештамо у карман?
За решавање таквог проблема креиране су специјалне
нечувајуће заграде (?: )
- оне групису, али не смештају у карман.
Пример
У следећем примеру прве заграде су нам потребне за груписање, а друге - за карман. Међутим, обе заграде чувају податке у карман:
<?php
$str = 'abab123';
$reg = '#(ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
Као резултат у нашим карманима ће бити следеће:
<?php
var_dump($res[0]); // исписаће 'abab123'
var_dump($res[1]); // исписаће 'ab'
var_dump($res[2]); // исписаће '123'
?>
Пример
Хајде да учинимо да први пар заграда само групише, али да не смешта у карман:
<?php
$str = 'abab123';
$reg = '#(?:ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
Као резултат у првом карману ће бити наш број:
<?php
var_dump($res[1]); // исписаће '123'
?>
Практични задаци
Дате су подниске, подељене на два дела
произвољним бројем парова $@:
<?php
$str = 'aaa$@bbb aaa$@$@bbb aaa$@$@$@bbb';
?>
Пронађите сваку од таквих подниски и за сваку пронађену подниску сместите у први карман оно што стоји пре раздвајача, а у други карман - оно што стоји после раздвајача.