Անվանված կապսուլներ PHP-ի կանոնավոր արտահայտություններում
Ենթադրենք, օգտագործելով preg_match, մենք ցանկանում ենք
բաժանել ամսաթիվը օր, ամիս և տարի: Դրա համար կօգտագործենք
կապսուլներ.
<?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']
?>
Ինչպես տեսնում եք, արդյունքում ստանում ենք զանգված, որի զրոյական տարրում կլինի ամբողջ ամսաթիվը, առաջինում՝ տարին, երկրորդում՝ ամիսը, երրորդում ՝ օրը։
Սակայն երբեմն հարմար կլիներ ստանալ կապսուլների պարունակությունը ասոցիատիվ զանգվածի տեսքով: Այս ինքնաթիռում մեր դեպքում լավ կլիներ ստանալ ահա այսպիսի զանգված.
[
'year' => '2025',
'month' => '10',
'day' => '29'
]
Դրա համար կանոնավոր արտահայտություններում գոյություն ունի հատուկ
շարահյուսություն: Ահա այն. (?<name>pattern),
որտեղ pattern - սա կանոնավոր արտահայտություն է, իսկ name
- սա կապսուլի անունն է։
Եկեք վերագրենք մեր կանոնավոր արտահայտությունը ամսաթվի համար անվանված կապսուլների միջոցով.
<?php
$str = '2025-10-29';
$reg = '#(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})#';
preg_match($reg, $str, $match);
var_dump($match);
?>
Արդյունքում մենք կստանանք ասոցիատիվ զանգված, որում բանալիները կլինեն կապսուլների անունները, իսկ արժեքները՝ այն, ինչ ընկել է դրանց մեջ.
[
'year' => '2025',
'month' => '10',
'day' => '29',
]
Իրականում, արդյունքների զանգվածում կապսուլների արժեքները
հասանելի կլինեն և՛ անունով, և՛
հերթական համարով: Այսինքն, օրինակ,
տարին կլինի հասանելի 'year'
բանալիով և 1 համարով,
ամիսը՝ 'month' բանալիով
և 2 համարով և այլն.
[
'year' => '2025',
'month' => '10',
'day' => '29',
1 => '2025',
2 => '10',
3 => '29'
]
Նկարագրված անվանված կապսուլներն ունեն ևս մի քանի
ալտերնատիվ շարահյուսություն. (?P<name>pattern)
և (?'name'pattern)։
Տրված է ժամանակով տող.
<?php
$str = '12:59:59';
?>
Դրեք ժամերը, րոպեները և վայրկյանները առանձին անվանված կապսուլների մեջ։
Գրեք ֆունկցիա, որն արդյունքների զանգվածում կջնջի բոլոր համարակալված կապսուլները՝ թողնելով միայն անվանվածները։