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'
]
Бул үчүн регулярдуу формулаларда атайын
синтаксис бар. Мына ушул: (?,
мында 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).
Убакыт менен берилген сап:
<?php
$str = '12:59:59';
?>
Сагат, мүнөт жана секундаларды бөлүк атталган кармандарга салыңыз.
Натыйжа массивиндеги бардык номерленген кармандарды өчүрүп, атталган кармандарды гана калтыра турган функция жазыңыз.