Nimetatud taskid PHP regulaaravaldistes
Oletame, et tahame kasutada preg_match
kuupäeva jagamiseks päevaks, kuuks ja aastaks. Kasutame
selleks taske:
<?php
$str = '2025-10-29';
$reg = '#(\d{4})-(\d{2})-(\d{2})#';
preg_match($reg, $str, $match);
var_dump($match); // väljastab ['2025-10-29', '2025', '10', '29']
?>
Nagu näete, saame tulemusena massiivi, milles nullindal elemendil on kogu kuupäev, esimesel - aasta, teisel - kuu, kolmandal - päev.
Mõnikord oleks aga mugav saada taskide sisu assotsiatiivse massiivi kujul. See tähendab meie puhul oleks tore saada järgmine massiiv:
[
'year' => '2025',
'month' => '10',
'day' => '29'
]
Selleks on regulaaravaldistes spetsiaalne
süntaks. See on: (?<name>pattern),
kus pattern - on regulaaravaldis ja name
- on taski nimi.
Kirjutame oma kuupäeva regulaaravaldise ümber kasutades nimetatud taskid:
<?php
$str = '2025-10-29';
$reg = '#(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})#';
preg_match($reg, $str, $match);
var_dump($match);
?>
Tulemusena saame assotsiatiivse massiivi, milles võtmeteks on taskide nimed ja väärtusteks - see, mis nende sattus:
[
'year' => '2025',
'month' => '10',
'day' => '29',
]
Tegelikult on tulemuste massiivis taskide väärtused
kättesaadavad nii nime kui
ka järjekorranumbri järgi. See tähendab, näiteks
aasta on kättesaadav võtme 'year'
ja numbri 1 järgi, kuu - võtme 'month'
ja numbri 2 järgi jne:
[
'year' => '2025',
'month' => '10',
'day' => '29',
1 => '2025',
2 => '10',
3 => '29'
]
Kirjeldatud nimetatud taskidel on veel mõned
alternatiivsed süntaksid: (?P<name>pattern)
ja (?'name'pattern).
Antud on string ajaga:
<?php
$str = '12:59:59';
?>
Pange tunnid, minutid ja sekundid eraldi nimetatud taskidesse.
Kirjutage funktsioon, mis kustutab tulemuste massiivist kõik nummerdatud taskid, jättes alles ainult nimetatud taskid.