PHP тұрақты өрнектеріндегі сақталмайтын жақшалар

Жақшалар () екі функцияны орындайды - таңбаларды топтастыру және карман функциясы. Ал егер бізге топтастыру керек болса, бірақ карманға салмау керек болса не істеу керек? Мұндай мәселені шешу үшін арнайы сақталмайтын жақшалар (?: ) ойлап табылды - олар топтастырады, бірақ карманға салмайды.

Мысал

Келесі мысалда бірінші жақшалар бізге топтастыру үшін қажет, ал екіншілері - карман үшін. Алайда, екеуі де жақшалар деректерді карманға сақтайды:

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

Нәтижесінде біздің кармандарымызда мыналар болады:

php<?php
  var_dump($res[0]); // шығарады 'abab123'
  var_dump($res[1]); // шығарады 'ab'
  var_dump($res[2]); // шығарады '123'
?>

Мысал

Бірінші жақша жұбы тек топтастыру үшін ғана, бірақ карманға салмау үшін жасайық:

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

Нәтижесінде бірінші карманда біздің санымыз болады:

php<?php
  var_dump($res[1]); // шығарады '123'
?>

Практикалық тапсырмалар

Задание 1

Екі бөлікке бөлінген ішкі жолдар берілген $@ жұптарының ерікті саны:

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

Осындай әрбір ішкі жолды тауып, әрбір табылған ішкі жол үшін бірінші карманға бөлгіштен бұрын тұрғанды салыңыз, ал екінші карманға - бөлгіштен кейін тұрғанды салыңыз.