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']
?>
Көріп отырғаныңыздай, нәтижеде біз массаiv аламыз, онда нөлдік элементте бүкіл күнтізбелік күн болады, біріншісінде - жыл, екіншісінде - ай, үшіншісінде - күн.
Алайда, кейде кармандардың мазмұн ассоциативті массаiv түрінде алу ыңғайлы болар еді. Яғни біздің жағдайда мынадай массаiv алу өте жақсы болар еді:
[
'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);
?>
Нәтижесінде бізде ассоциативті массаiv пайда болады, онда кілттері карман атаулары болады, ал мәндері - оларға түскен нәрсе:
[
'year' => '2025',
'month' => '10',
'day' => '29',
]
Шын мәнінде, нәтиже массаivінде кармандардың мәндері
ат бойынша да, реттік нөмірі бойынша да қолжетімді болады. Яғни, мысалы,
жыл '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';
?>
Сағаттарды, минуттарды және секундтарды жеке атаулы кармандарға салыңыз.
Нәтиже массаivінде барлық нөмірленген кармандарды жойып, тек атаулы кармандарды қалдыратын функция жазыңыз.