PHP-də Adlandırılmış Qruplar
Tutaq ki, preg_match ilə
tarixi gün, ay və ilə ayırmaq istəyirik. Bunun üçün
qruplardan istifadə edək:
<?php
$str = '2025-10-29';
$reg = '#(\d{4})-(\d{2})-(\d{2})#';
preg_match($reg, $str, $match);
var_dump($match); // çıxardacaq ['2025-10-29', '2025', '10', '29']
?>
Gördüyünüz kimi, nəticədə sıfırıncı elementdə bütün tarixin, birincidə - ilin, ikincidə - ayın, üçüncüdə - günün olduğu bir massiv alırıq.
Bəzən, however, qrupların məzmununu assosiativ massiv şəklində almaq rahat olardı. Yəni bizim vəziyyətimizdə belə bir massiv almaq yaxşı olardı:
[
'year' => '2025',
'month' => '10',
'day' => '29'
]
Bunun üçün regex ifadələrində xüsusi
sintaksis mövcuddur. Budur: (?<name>pattern),
burada pattern - regex ifadəsi, name
ise qrupun adıdır.
Gəlin tarix üçün regex ifadəmizi adlandırılmış qruplar vasitəsilə yenidən yazaq:
<?php
$str = '2025-10-29';
$reg = '#(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})#';
preg_match($reg, $str, $match);
var_dump($match);
?>
Nəticədə, açarı qrupların adları, dəyərləri isə onların tutduğu məzmun olan assosiativ massiv alınacaq:
[
'year' => '2025',
'month' => '10',
'day' => '29',
]
Əslində, nəticə massivində qrupların dəyərləri
həm ada, həm də sıra nömrəsinə görə əlçatan olacaq. Yəni, məsələn,
il 'year' açarı və
1 nömrəsi ilə, ay - 'month' açarı
və 2 nömrəsi ilə və s. əlçatan olacaq:
[
'year' => '2025',
'month' => '10',
'day' => '29',
1 => '2025',
2 => '10',
3 => '29'
]
Təsvir olunan adlandırılmış qrupların bir neçə
alternativ sintaksisi də var: (?P<name>pattern)
və (?'name'pattern).
Zamanı olan bir sətir verilmişdir:
<?php
$str = '12:59:59';
?>
Saati, dəqiqəni və saniyəni ayrı-ayrı adlandırılmış qruplara yerləşdirin.
Nəticə massivində nömrələnmiş bütün qrupları silən, yalnız adlandırılmışları saxlayan bir funksiya yazın.