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