Դիմումով փոխարինում PHP-ում կանոնավոր արտահայտությունների միջոցով
Ենթադրենք ունենք հետևյալ տողը.
<?php
$str = '2+3= 3+5= 7+8=';
?>
Ենթադրենք, մեզ անհրաժեշտ է գտնել բոլոր կոնստրուկցիաները, որոնք նման են թիվ+թիվ= և անել այնպես, որ հավասարության նշանից հետո հայտնվի գումարման արդյունքը։
Նմանատիպ խնդիր լուծելու համար հարմար է օգտագործել
preg_replace_callback ֆունկցիան, որն
աշխատում է նույն կերպ, ինչ preg_replace
ֆունկցիան՝ գտնում և փոխարինում է ըստ կանոնավոր արտահայտության,
բայց թույլ է տալիս լրացուցիչ մանիպուլյացիաներ կատարել
գտնված հատվածների հետ։
Առաջին պարամետրով ֆունկցիան ընդունում է կանոնավոր արտահայտությունը, երկրորդով՝ այն, ինչով փոխարինել, երրորդով՝ այն տողը, որում կատարվում է փոխարինումը։
Այդ դեպքում երկրորդ պարամետրին պետք է փոխանցել դիմում-ֆունկցիա, որը կկանչվի յուրաքանչյուր գտնված համընկնման համար։
Դիմումի առաջին պարամետրով պետք է նշել փոփոխական, որի մեջ կհայտնվի գտնվածը։ Այդ փոփոխականը կներկայացնի գտնվածի գրպանների զանգված։
Փորձենք գործնականում։ Գրենք կոդ, որը կբռնի մեր ենթատողերը, միաժամանակ դնելով առաջին թիվը առաջին գրպանում, իսկ երկրորդը երկրորդ գրպանում.
<?php
$str = '2+3= 3+5= 7+8=';
preg_replace_callback('#(\d+)\+(\d+)=#', function($match) {
var_dump($match);
}, $str);
?>
Արդյունքում մեր var_dump-ը կգործի
երեք անգամ, հերթականությամբ ցուցադրելով հետևյալը.
['2+3=', '2', '3']
['3+5=', '3', '5']
['7+8=', '7', '7']
Անցնենք հաջորդին։ Յուրաքանչյուր համընկնում կփոխարինվի
այն բանով, ինչ դիմումը վերադարձնում է return-ի միջոցով։
Օրինակի համար եկեք փոխարինենք փնտրվող
ենթատողերից յուրաքանչյուրը '!' նշանով.
<?php
$str = '2+3= 3+5= 7+8=';
$res = preg_replace_callback('#(\d+)\+(\d+)=#', function($match) {
return '!';
}, $str);
echo $res; // կարտադրի '! ! !'
?>
Իսկ հիմա փոխարինենք յուրաքանչյուր ենթատող նրանում գտնվող զույգ թվերի գումարով.
<?php
$str = '2+3= 3+5= 7+8=';
$res = preg_replace_callback('#(\d+)\+(\d+)=#', function($match) {
return $match[1] + $match[2];
}, $str);
echo $res; // կարտադրի '5 8 13'
?>
Ստացվում է, որ մեր խնդիրը գրեթե լուծված է։ Մնում է անել այնպես, որ թվերի գումարից առաջ մնա փնտրվող ենթատողը։ Դրա համար գումարից առաջ կտեղադրենք զրոյական գրպանի պարունակությունը.
<?php
$str = '2+3= 3+5= 7+8=';
$res = preg_replace_callback('#(\d+)\+(\d+)=#', function($match) {
return $match[0] . ($match[1] + $match[2]);
}, $str);
echo $res; // կարտադրի '2+3=5 3+5=8 7+8=13'
?>
Տրված է տող.
<?php
$str = 'The numbers are 3, 7 and 12';
?>
Փոխարինեք տողի բոլոր թվերը նրանց քառակուսիներով։
Սպասվող արդյունք.
'The numbers are 9, 49 and 144'
Տրված է տող.
<?php
$str = '2023-01-15 2022-12-31 2024-05-20';
?>
Բոլոր ամսաթվերը վերափոխեք օր.ամիս.տարի ֆորմատի։
Տրված է տող.
<?php
$str = 'Costs: $15, $20, $100';
?>
Բոլոր գները բարձրացրեք 10%-ով։