Salvestamata sulud PHP regulaaravaldistes

Sulud () täidavad kahte funktsiooni - sümbolite grupeerimine ja põhi funktsioon. Aga mida teha, kui me vajame grupeerida, kuid mitte panna põhja? Sellise probleemi lahendamiseks on loodud spetsiaalsed salvestamata sulud (?: ) - nad grupeerivad, kuid ei pane põhja.

Näide

Järgmises näites on esimesed sulud meile vajalikud groupeerimiseks, teised aga põhja. Siiski, mõlemad sulud salvestavad andmed põhja:

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

Tulemusena on meie põhjas järgmine:

php<?php
  var_dump($res[0]); // väljastab 'abab123'
  var_dump($res[1]); // väljastab 'ab'
  var_dump($res[2]); // väljastab '123'
?>

Näide

Teeme nii, et esimene sulgupaar ainult grupeeriks, kuid ei paneks põhja:

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

Tulemusena on meie esimeses põhjas meie number:

php<?php
  var_dump($res[1]); // väljastab '123'
?>

Praktilised ülesanded

Задание 1

Antud alamstringid, jagatud kaheks osaks suvalise arvu paaridega $@:

php<?php
  $str = 'aaa$@bbb aaa$@$@bbb aaa$@$@$@bbb';
?>

Leidke iga selline alamstring ja iga leitud alamstringi puhul pange esimesse põhja see, mis on enne eraldajat, teise põhja - see, mis on pärast eraldajat.