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

Іменаваныя карманы ў рэгулярках PHP

Хай з дапамогай preg_match мы хочам разбіць дату на дзень, месяц і год. Выкарастаем для гэтага карманы:

<?php $str = '2025-10-29'; $reg = '#(\d{4})-(\d{2})-(\d{2})#'; preg_match($reg, $str, $match); var_dump($match); // выведзе ['2025-10-29', '2025', '10', '29'] ?>

Як вы бачыце, у выніку мы атрымліваем масіў, у якім у нулявым элеменце будзе ўся дата, у першым - год, у другім - месяц, у трэцім - дзень.

Часам, аднак, было б зручна атрымаць змесціва карманаў у выглядзе асацыятыўнага масіва. Гэта значыць у нашым выпадку было б добра атрымаць вось такі масіў:

[ 'year' => '2025', 'month' => '10', 'day' => '29' ]

Для гэтага ў рэгулярках існуе спецыяльны сінтаксіс. Вось ён: (?<name>pattern), дзе pattern - гэта рэгулярка, а name - гэта імя кармана.

Давайце перапішам нашу рэгулярку для даты праз іменаваныя карманы:

<?php $str = '2025-10-29'; $reg = '#(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})#'; preg_match($reg, $str, $match); var_dump($match); ?>

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

[ 'year' => '2025', 'month' => '10', 'day' => '29', ]

На самай справе ў масіве з вынікам значэнні карманаў будуць даступныя як па імі, так і па парадкавым нумары. Гэта значыць, напрыклад, год будзе даступны па ключы 'year' і па нумары 1, месяц - па ключы 'month' і па нумары 2 і так далей:

[ 'year' => '2025', 'month' => '10', 'day' => '29', 1 => '2025', 2 => '10', 3 => '29' ]

Апісаныя іменаваныя карманы маюць яшчэ некалькі альтэрнатыўных сінтаксісаў: (?P<name>pattern) і (?'name'pattern).

Дадзена радок з часам:

<?php $str = '12:59:59'; ?>

Пакладзеце гадзіны, хвіліны і секунды ў асобныя іменаваныя карманы.

Напішыце функцыю, якая ў масіве з вынікам выдаліць усе нумараваныя карманы, пакінуўшы толькі іменаваныя.

byenru