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';
?>
Գտեք յուրաքանչյուր այդպիսի ենթատող և յուրաքանչյուր գտնված ենթատողի համար առաջին գրպանում դրեք այն, ինչ կա բաժանարարից առաջ, իսկ երկրորդ գրպանում՝ այն, ինչ կա բաժանարարից հետո: