PHP-ში რეგულარული გამონათქვამების არადამახსოვრებადი ფრჩხილები
ფრჩხილებს () აქვთ ორი ფუნქცია -
სიმბოლოების დაჯგუფება და "ჯიბის" ფუნქცია.
რა ვქნათ, თუ გვსურს დაჯგუფება,
მაგრამ "ჯიბეში" ჩაწერა არ გვსურს?
ამ პრობლემის გადასაჭრელად შექმნილა სპეციალური
არადამახსოვრებადი ფრჩხილები (?: )
- ისინი აჯგუფებენ, მაგრამ არ ინახავენ "ჯიბეში".
მაგალითი
შემდეგ მაგალითში პირველი ფრჩხილები გვჭირდება დაჯგუფებისთვის, ხოლო მეორე - "ჯიბისთვის". თუმცა, ორივე ფრჩხილები ინახავს მონაცემებს "ჯიბეში":
<?php
$str = 'abab123';
$reg = '#(ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
შედეგად, ჩვენს "ჯიბეებში" იქნება შემდეგი:
<?php
var_dump($res[0]); // გამოიტანს 'abab123'
var_dump($res[1]); // გამოიტანს 'ab'
var_dump($res[2]); // გამოიტანს '123'
?>
მაგალითი
მოდით, გავხადოთ ისე, რომ ფრჩხილების პირველმა წყვილმა მხოლოდ დაჯგუფება მოახდინოს, მაგრამ არ ჩაიწეროს "ჯიბეში":
<?php
$str = 'abab123';
$reg = '#(?:ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
შედეგად, პირველ "ჯიბეში" იქნება ჩვენი რიცხვი:
<?php
var_dump($res[1]); // გამოიტანს '123'
?>
პრაქტიკული ამოცანები
მოცემულია ქვესტრიქონები, გაყოფილი ორ ნაწილად
$@-ის წყვილების თვითნებური რაოდენობით:
<?php
$str = 'aaa$@bbb aaa$@$@bbb aaa$@$@$@bbb';
?>
იპოვეთ თითოეული ასეთი ქვესტრიქონი და თითოეული ნაპოვნი ქვესტრიქონისთვის პირველ "ჯიბეში" ჩაწერეთ ის, რაც გამყოფის წინ დგას, ხოლო მეორე "ჯიბეში" - ის, რაც გამყოფის შემდეგ დგას.