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';
?>

იპოვეთ თითოეული ასეთი ქვესტრიქონი და თითოეული ნაპოვნი ქვესტრიქონისთვის პირველ "ჯიბეში" ჩაწერეთ ის, რაც გამყოფის წინ დგას, ხოლო მეორე "ჯიბეში" - ის, რაც გამყოფის შემდეგ დგას.