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

Nəticədə birinci tutumda bizim rəqəmimiz olacaq:

php<?php
  var_dump($res[1]); // çıxaracaq '123'
?>

Praktiki tapşırıqlar

Задание 1

Ixtiyari sayda $@ cütleri ile iki hisseye bolunmuş alt sətirlər verilmişdir:

php<?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.