PHP'de Yakalama Yapmayan Parantezler
Parantezler () iki işlevi yerine getirir -
karakterleri gruplama ve yakalama grubu işlevi. Peki
ya gruplamamız gerekiyor ama yakalama grubuna koymamak
istiyorsak?
Bu sorunu çözmek için özel
yakalama yapmayan parantezler (?: )
icat edilmiştir - bunlar gruplama yapar, ancak yakalama grubuna koymaz.
Örnek
Aşağıdaki örnekte, ilk parantezler gruplama için, ikinci parantezler ise yakalama grubu için gereklidir. Ancak, her iki parantez türü de verileri yakalama grubuna kaydeder:
<?php
$str = 'abab123';
$reg = '#(ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
Sonuç olarak, yakalama gruplarımızda aşağıdakiler olacaktır:
<?php
var_dump($res[0]); // 'abab123' çıktısını verir
var_dump($res[1]); // 'ab' çıktısını verir
var_dump($res[2]); // '123' çıktısını verir
?>
Örnek
İlk parantez çiftinin sadece gruplama yapmasını, ancak yakalama grubuna koymamasını sağlayalım:
<?php
$str = 'abab123';
$reg = '#(?:ab)+([1-9]+)#';
preg_match_all($reg, $str, $res);
?>
Sonuç olarak, ilk yakalama grubunda sayımız olacaktır:
<?php
var_dump($res[1]); // '123' çıktısını verir
?>
Pratik Görevler
Rastgele sayıda $@ çifti ile iki parçaya ayrılmış
alt dizgiler verilmiştir:
<?php
$str = 'aaa$@bbb aaa$@$@bbb aaa$@$@$@bbb';
?>
Bu tür her bir alt dizgeyi bulun ve her bulunan alt dizge için, ayırıcıdan önce geleni ilk yakalama grubuna, ayırıcıdan sonra geleni ise ikinci yakalama grubuna koyun.