PHP-daky regulýar ifadelerde atlandyrylan kartlar
preg_match bilen bir seneni güne, aýa we ýyla bölmek isleýändigimizi öýlän. Bunuň üçin kartlary ulanyň:
<?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'] çykarar
?>
Görşüňiz ýaly, netijede noldaky elementde tutuş sene, birinjide ýyl, ikinjide aý, üçünjide gün boljak massiw alýarys.
Emma käte-de, kart mazmunyny assosiatiw massiw görnüşinde almak amatly bolar. Ýagny, bizim ýagdaýymyzda şeýle massiw almak gowy bolar:
[
'year' => '2025',
'month' => '10',
'day' => '29'
]
Bunun üçin regulýar ifadelerde aýratyn sintaksis bar. Ol şeýle: (?<name>pattern), bu ýerde pattern regulýar ifade, name bolsa kartyň adydyr.
Indi senäniň üçin bolan regulýar ifademizi atlandyrylan kartlar bilen ýazaýalyň:
<?php
$str = '2025-10-29';
$reg = '#(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})#';
preg_match($reg, $str, $match);
var_dump($match);
?>
Netijede bizde klýuçlary kart atlary, bahalary bolsa olara düşen zatlar bolan assosiatiw massiw bolar:
[
'year' => '2025',
'month' => '10',
'day' => '29',
]
Aslynda, netije massiwinde kart bahalary at boýunça hem, tertip belgisi boýunça hem elýeterli bolar. Ýagny, mysal üçin, ýyl 'year' klýuçy we 1 belgisi boýunça, aý 'month' klýuçy we 2 belgisi boýunça we ş.m. elýeterli bolar:
[
'year' => '2025',
'month' => '10',
'day' => '29',
1 => '2025',
2 => '10',
3 => '29'
]
Beýan edilen atlandyrylan kartlaryň ýene birnäçe alternatiw sintaksisi bar: (?P<name>pattern) we (?'name'pattern).
Wagt bilen setir berlen:
<?php
$str = '12:59:59';
?>
Sagady, minutlary we sekuntlary aýratyn atlandyrylan kartlara goýuň.
Netije massiwinden ähli belgili kartlary aýyryp, diňe atlandyrylanlary galdyrýan funksiýa ýazyň.