Xhepa me Emra në Regex në PHP
Le të supozojmë se duke përdorur preg_match duam
të ndajmë një datë në ditë, muaj dhe vit. Le të përdorim
xhepa për këtë:
<?php
$str = '2025-10-29';
$reg = '#(\d{4})-(\d{2})-(\d{2})#';
preg_match($reg, $str, $match);
var_dump($match); // do të printojë ['2025-10-29', '2025', '10', '29']
?>
Siç e shihni, si rezultat marrim një array, ku në elementin zero do të jetë e gjithë data, në të parën - viti, në të dytën - muaji, në të tretën - dita.
Megjithatë, nganjëherë do të ishte i përshtatshëm të merrnim përmbajtjen e xhepave në formën e një array asociativ. Kjo do të thotë, në rastin tonë do të ishte mirë të merrnim një array si ky:
[
'year' => '2025',
'month' => '10',
'day' => '29'
]
Për këtë, në regex ekziston një sintaksë e veçantë.
Kjo është ajo: (?<name>pattern),
ku pattern - është regex, dhe name
- është emri i xhepit.
Le të rishkruajmë regex-in tonë për datën duke përdorur xhepa me emra:
<?php
$str = '2025-10-29';
$reg = '#(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})#';
preg_match($reg, $str, $match);
var_dump($match);
?>
Si rezultat, do të kemi një array asociativ ku çelësat do të jenë emrat e xhepave, dhe vlerat - ajo që u kap në to:
[
'year' => '2025',
'month' => '10',
'day' => '29',
]
Në fakt, në array me rezultat, vlerat
e xhepave do të jenë të disponueshme si sipas emrit, ashtu
edhe sipas numrit rendor. Kjo do të thotë, për shembull,
viti do të jetë i disponueshëm me çelësin 'year'
dhe me numrin 1, muaji - me çelësin 'month'
dhe me numrin 2 e kështu me radhë:
[
'year' => '2025',
'month' => '10',
'day' => '29',
1 => '2025',
2 => '10',
3 => '29'
]
Xhepat e emërtuar të përshkruar kanë edhe disa
sintaksa alternative: (?P<name>pattern)
dhe (?'name'pattern).
Jepet një varg me kohë:
<?php
$str = '12:59:59';
?>
Vendosni orët, minutat dhe sekondat në xhepa të veçantë me emra.
Shkruani një funksion që në array me rezultat fshin të gjitha xhepat e numëruar, duke lënë vetëm ata me emra.