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<?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<?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<?php
  $str = 'abab123';
  $reg = '#(?:ab)+([1-9]+)#';
  preg_match_all($reg, $str, $res);
?>

Sonuç olarak, ilk yakalama grubunda sayımız olacaktır:

php<?php
  var_dump($res[1]); // '123' çıktısını verir
?>

Pratik Görevler

Задание 1

Rastgele sayıda $@ çifti ile iki parçaya ayrılmış alt dizgiler verilmiştir:

php<?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.