Mabano yasiyohifadhi katika regex za PHP

Mabano () yanatekeleza kazi mbili - kuweka herufi pamoja na kazi ya mfuko. Na je, nini kufanya ikiwa tunahitaji kuwapa kundi, lakini si kuweka kwenye mfuko? Ili kutatua tatizo kama hilo, zimeundwa maalum mabano yasiyohifadhi (?: ) - huwapa kundi, lakini haiweki kwenye mfuko.

Mfano

Katika mfano ufuatao, mabano ya kwanza yanahitajika kwa kuwapa kundi, na ya pili - kwa mfuko. Hata hivyo, mabano yote mawili huhifadhi data kwenye mfuko:

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

Kama matokeo, katika mifuko yetu kutakuwa na yafuatayo:

php<?php
  var_dump($res[0]); // itatoa 'abab123'
  var_dump($res[1]); // itatoa 'ab'
  var_dump($res[2]); // itatoa '123'
?>

Mfano

Wacha tufanye ili jozi ya kwanza ya mabano iweze tu kuwapa kundi, lakini isiweke kwenye mfuko:

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

Kama matokeo, kwenye mfuko wa kwanza kutakuwa na nambari yetu:

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

Kazi za Vitendo

Задание 1

Kuna sehemu ndogo, zimegawanywa katika sehemu mbili kwa idadi ya kiholela ya jozi $@:

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

Tafuta kila sehemu ndogo kama hiyo na kwa kila sehemu ndogo iliyopatikana weka kwenye mfuko wa kwanza kile kilicho kabla ya kitenganishi, na kwenye mfuko wa pili - kile kilicho baada ya kitenganishi.