⊗ppPmRgRCb 260 of 447 menu

Замена са колбеком преко регуларних израза у 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 ће радити три пута, заузast редом исписујући следеће:

['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%.

Српски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Користимо колачиће за рад сајта, аналитику и персонализацију. Обрада података се врши у складу са Политиком приватности.
прихвати све подеси одбиј