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
$str = 'abab123';
$reg = '#(ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
Kama matokeo, katika mifuko yetu kutakuwa na yafuatayo:
<?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
$str = 'abab123';
$reg = '#(?:ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
Kama matokeo, kwenye mfuko wa kwanza kutakuwa na nambari yetu:
<?php
var_dump($res[1]); // itatoa '123'
?>
Kazi za Vitendo
Kuna sehemu ndogo, zimegawanywa katika sehemu mbili
kwa idadi ya kiholela ya jozi $@:
<?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.