Кӯрпаҳои номдор дар ибораҳои мунтазами 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';
?>
Соатҳо, дақиқаҳо ва сонияҳоро дар ҷойҳои номдори алоҳида гузоред.
Функсияе нависед, ки дар массиви бо натиҷа ҳамаи кӯрпаҳои рақамгузоришударо нест кунад, танҳо кӯрпаҳои номдорро боқӣ гузорад.