Sloturi denumite în expresiile regulate PHP
Să presupunem că folosind preg_match vrem
să împărțim o dată în zi, lună și an. Să folosim
pentru aceasta sloturi:
<?php
$str = '2025-10-29';
$reg = '#(\d{4})-(\d{2})-(\d{2})#';
preg_match($reg, $str, $match);
var_dump($match); // va afișa ['2025-10-29', '2025', '10', '29']
?>
După cum vedeți, în rezultat obținem un array, în care elementul zero va conține întreaga dată, în primul - anul, în al doilea - luna, în al treilea - ziua.
Uneori, totuși, ar fi convenabil să obținem conținutul sloturilor sub forma unui array asociativ. Adică în cazul nostru ar fi bine să obținem un array ca acesta:
[
'year' => '2025',
'month' => '10',
'day' => '29'
]
Pentru aceasta în expresiile regulate există o sintaxă
specială. Iat-o: (?<name>pattern),
unde pattern - este expresia regulată, iar name
- este numele slotului.
Să rescriem expresia noastră regulată pentru dată cu sloturi denumite:
<?php
$str = '2025-10-29';
$reg = '#(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})#';
preg_match($reg, $str, $match);
var_dump($match);
?>
Ca rezultat, vom obține un array asociativ în care cheile vor fi numele sloturilor, iar valorile - ceea ce a fost capturat în ele:
[
'year' => '2025',
'month' => '10',
'day' => '29',
]
De fapt, în array-ul cu rezultat, valorile
sloturilor vor fi accesibile atât după nume, cât
și după numărul de ordine. Adică, de exemplu,
anul va fi accesibil după cheia 'year'
și după numărul 1, luna - după cheia 'month'
și după numărul 2 și așa mai departe:
[
'year' => '2025',
'month' => '10',
'day' => '29',
1 => '2025',
2 => '10',
3 => '29'
]
Sloturile denumite descrise mai au câteva
sintexe alternative: (?P<name>pattern)
și (?'name'pattern).
Este dat un șir cu ora:
<?php
$str = '12:59:59';
?>
Puneți orele, minutele și secundele în sloturi denumite separate.
Scrieți o funcție care în array-ul cu rezultat va șterge toate sloturile numerotate, lăsând doar pe cele denumite.