АКЦЫЯ: бясплатныя месячныя курсы па стварэнні сайтаў
на выбар: вёрстка, JavaScript, PHP, Python або фрэймворкі. Сёння апошні дзень для запісу! Націскай!
⊗ppPmRgNPB 252 of 447 menu

Незахоўвальныя дужкі ў рэгулярках PHP

Дужкі () выконваюць дзве функцыі - групоўку сімвалаў і функцыю кішэні. А што рабіць, калі нам трэба згрупаваць, але ў кішэню не класці? Для вырашэння такой праблемы прыдуманы спецыяльныя незахоўвальныя дужкі (?: ) - яны групуюць, але не кладуць у кішэню.

Прыклад

У наступным прыкладзе першыя дужкі нам патрэбныя для групоўкі, а другія - для кішэні. Аднак, і тыя, і іншыя дужкі захоўваюць дадзеныя ў кішэню:

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

У выніку ў нашых кішэнях будзе наступнае:

<?php var_dump($res[0]); // выведзе 'abab123' var_dump($res[1]); // выведзе 'ab' var_dump($res[2]); // выведзе '123' ?>

Прыклад

Зробім так, каб першая пара дужак толькі групавала, але не клала ў кішэню:

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

У выніку ў першай кішэні будзе наша лік:

<?php var_dump($res[1]); // выведзе '123' ?>

Практычныя задачы

Дадзены падрадкі, падзеленыя на дзве часткі адвольная колькасцю пар $@:

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

Знайдзіце кожную з такіх падрадкаў і для кожнай знойдзенай падрадкі пакладзеце ў першую кішэню тое, што стаіць да падзельніка, а ў другую кішэню - тое, што стаіць пасля падзельніка.

byenru