PHP regulýar ifadelerinde saklamýan çyzykly aýlawlar
Çyzykly aýlawlar () iki wezipäni ýerine ýetirýär -
nyşanlary toparlaşdyrmak we "karman" funksiýasy. Eger
biz toparlaşdyrmaly, ýöne karmana goýmaly däl bolsak, näme etmeli?
Bu meseläni çözmek üçin aýratyn
saklamýan çyzykly aýlawlar (?: )
oýlanyp tapyldy - olar toparlaşdyrýar, ýöne karmana goýmaz.
Mysal
Aşakdaky mysalda birinji çyzykly aýlawlar biz üçin toparlaşdyrmak üçin gerek, ikinjileri bolsa karman üçin. Şeýle-de bolsa, ikisi hem maglumatlary karmana saklaýar:
<?php
$str = 'abab123';
$reg = '#(ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
Netijede, bizim karmanlarymyzda aşakdakylar bolar:
<?php
var_dump($res[0]); // 'abab123' çykarar
var_dump($res[1]); // 'ab' çykarar
var_dump($res[2]); // '123' çykarar
?>
Mysal
Indi birinji jübüt çyzykly aýlawlaryň diňe toparlaşdyryp, ýöne karmana goýmaz ýaly edeliň:
<?php
$str = 'abab123';
$reg = '#(?:ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
Netijede, birinji karmanda bizim sanymyz bolar:
<?php
var_dump($res[1]); // '123' çykarar
?>
Amaly meseleler
Iki bölüme bölünen we özbaşdak sany ýygy-ýygydan gelen
$@ jübütleri bilen bölünen iň kiçi setirler berlen:
<?php
$str = 'aaa$@bbb aaa$@$@bbb aaa$@$@$@bbb';
?>
Şeýle her bir iň kiçi setiri tapyň we her bir tapylan iň kiçi setir üçin bölüjiň öňündäkini birinji karmana, bölüjiň soňundakyny bolsa ikinji karmana goýuň.