PHP regular ifodalarida saqlamaydigan qavslar
Qavslar () ikkita funkciyani bajaradi -
belgilarni guruhlash va "karman" funkciyasi. Ammo
agar biz guruhlash kerak, lekin karmanga saqlamasak nima qilish kerak?
Bunday muammoni hal qilish uchun maxsus
saqlamaydigan qavslar (?: )
yaratilgan - ular guruhlaydi, lekin karmanga saqlamaydi.
Misol
Quyidagi misolda birinchi qavslar bizga guruhlash uchun kerak, ikkinchilari esa karman uchun. Biroq, ikkala qavs ham ma'lumotlarni karmanga saqlaydi:
<?php
$str = 'abab123';
$reg = '#(ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
Natijada bizning karmanlarimizda quyidagilar bo'ladi:
<?php
var_dump($res[0]); // chiqaradi 'abab123'
var_dump($res[1]); // chiqaradi 'ab'
var_dump($res[2]); // chiqaradi '123'
?>
Misol
Keling, birinchi qavs juftligi faqat guruhlash uchun ishlatiladi, lekin karmanga saqlamasin:
<?php
$str = 'abab123';
$reg = '#(?:ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
Natijada birinchi karmanda bizning raqamimiz bo'ladi:
<?php
var_dump($res[1]); // chiqaradi '123'
?>
Amaliy vazifalar
Berilgan pastki satrlar, ikkita qismga bo'lingan
ixtiyoriy miqdordagi $@ juftliklari bilan ajratilgan:
<?php
$str = 'aaa$@bbb aaa$@$@bbb aaa$@$@$@bbb';
?>
Har bir shunday pastki satrni toping va har bir topilgan pastki satr uchun birinchi karmanga ajratgichdan oldin turgan narsani, ikkinchi karmanga esa - ajratgichdan keyin turgan narsani qo'ying.