Ҷузъҳои ғайринигоҳдории дар regex-и PHP

Қавсҳои () ду вазифаро иҷро мекунанд - гурӯҳбандии аломатҳо ва вазифаи карман. Ва чӣ кунед, агар ба мо гурӯҳбандӣ лозим бошад, вале ба карман нагузорем? Барои ҳалли чунин мушкилиёт ҷузъҳои махсус ғайринигоҳдор (?: ) пешбинӣ шудаанд - онҳо гурӯҳбандӣ мекунанд, вале ба карман намегузоранд.

Намуна

Дар намунаи зерин қавсҳои аввал барои мо заруранд барои гурӯҳбандӣ, ва қавсҳои дуюм - барои карман. Аммо, ҳам онҳо ва ҳам инҳо қавсҳо маълумотро дар карман нигоҳ медоранд:

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

Дар натиҷа дар карманҳои мо чизҳои зерин хоҳад буд:

php<?php
  var_dump($res[0]); // 'abab123'-ро бармеоварад
  var_dump($res[1]); // 'ab'-ро бармеоварад
  var_dump($res[2]); // '123'-ро бармеоварад
?>

Намуна

Биёед тоҷриба кунем, ки ҷуфти аввали қавсҳо фақат гурӯҳбандӣ кунанд, вале ба карман нагузоранд:

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

Дар натиҷа дар кармани аввал рақами мо хоҳад буд:

php<?php
  var_dump($res[1]); // '123'-ро бармеоварад
?>

Масъалаҳои амалӣ

Задание 1

Зерсатрҳои додашуда, ки ба ду қисм тақсим шудаанд бо миқдори ихтиёрии ҷуфтҳои $@:

php<?php
  $str = 'aaa$@bbb aaa$@$@bbb aaa$@$@$@bbb';
?>

Ҳар яке аз чунин зерсатрҳоро ёбед ва барои ҳар як зерсатри ёфташуда дар кармани аввал чизеро, ки пеш аз ҷудокунанда истодааст, ва дар кармани дуюм - чизеро, ки баъд аз ҷудокунанда истодааст, гузоред.