PHP-də qruplasdirmayan morcekler
Mörcekler () iki funksiya yerine yetirir -
simvolların qruplasdırılması ve tutum funksiyası.
Bəs biz qruplasdırmaq istəyirik, amma tutuma qoymaq istəmiriksə?
Belə bir problem üçün xüsusi
qruplasdirmayan morcekler (?: )
icad edilmişdir - onlar qruplasdırır, lakin tutuma qoymur.
Misal
Aşağıdakı misalda birinci mörcekler bizə qruplasdırmaq üçün lazımdır, ikincilər isə - tutum üçün. Lakin, həm birinci, həm də ikinci mörcekler məlumatı tutuma yerləşdirir:
<?php
$str = 'abab123';
$reg = '#(ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
Nəticədə tutumlarımızda aşağıdakılar olacaq:
<?php
var_dump($res[0]); // çıxaracaq 'abab123'
var_dump($res[1]); // çıxaracaq 'ab'
var_dump($res[2]); // çıxaracaq '123'
?>
Misal
Gəlin elə edək ki, birinci cüt mörcek yalnız qruplasdırsın, lakin tutuma qoymasın:
<?php
$str = 'abab123';
$reg = '#(?:ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
Nəticədə birinci tutumda bizim rəqəmimiz olacaq:
<?php
var_dump($res[1]); // çıxaracaq '123'
?>
Praktiki tapşırıqlar
Ixtiyari sayda $@ cütleri ile iki hisseye
bolunmuş alt sətirlər verilmişdir:
<?php
$str = 'aaa$@bbb aaa$@$@bbb aaa$@$@$@bbb';
?>
Belə hər bir alt sətiri tapın və hər bir tapılmış alt sətir üçün birinci tutuma ayırıcıdan qabaq duranı, ikinci tutuma isə - ayırıcıdan sonra duranı yerləşdirin.