⊗ppPmRgRCb 260 of 447 menu

Zamena sa callback-om preko regularnih izraza u PHP-u

Recimo da imamo sledeći string:

<?php $str = '2+3= 3+5= 7+8='; ?>

Recimo da treba da pronadjemo sve konstrukcije oblika broj+broj= i da postignemo da nakon znaka jednakosti se pojavi rezultat sabiranja.

Za rešavanje ovakvog zadatka zgodno je koristiti funkciju preg_replace_callback, koja radi analogno funkciji preg_replace - pronalazi i zamenjuje prema regularnom izrazu, ali omogućava izvođenje dodatnih manipulacija sa pronađenim delovima.

Prvi parametar funkcija prima regularni izraz, drugi - na šta menjamo, treći - string, u kome se vrši zamena.

Pritom u drugi parametar treba proslediti funkciju-callback, koja će biti pozvana za svako pronađeno poklapanje.

Prvim parametrom callback-a treba naznačiti promenljivu u koju će upadati pronađeno. Ta promenljiva će predstavljati niz "capture group"-ova (džepova) pronađenog.

Hajde da probamo u praksi. Napišimo kod koji će da uhvati naše podstringove, pri čemu će prvi broj smestiti u prvi capture group, a drugi - u drugi:

<?php $str = '2+3= 3+5= 7+8='; preg_replace_callback('#(\d+)\+(\d+)=#', function($match) { var_dump($match); }, $str); ?>

Kao rezultat, naš var_dump će se aktivirati tri puta, redom ispisujući sledeće:

['2+3=', '2', '3'] ['3+5=', '3', '5'] ['7+8=', '7', '7']

Idemo dalje. Svako poklapanje će biti zamenjeno onim što callback vrati putem return. Hajde za primer da zamenimo svaki od traženih podstringova znakom '!':

<?php $str = '2+3= 3+5= 7+8='; $res = preg_replace_callback('#(\d+)\+(\d+)=#', function($match) { return '!'; }, $str); echo $res; // ispisaće '! ! !' ?>

A sada da zamenimo svaki podstring zbirom parova brojeva u njemu:

<?php $str = '2+3= 3+5= 7+8='; $res = preg_replace_callback('#(\d+)\+(\d+)=#', function($match) { return $match[1] + $match[2]; }, $str); echo $res; // ispisaće '5 8 13' ?>

Ispostavlja se da je naš zadatak skoro rešen. Ostalo je da postignemo da se ispred zbira brojeva zadrži traženi podstring. Za ovo ćemo da umetnemo ispred zbira sadržaj nultog capture group-a:

<?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; // ispisaće '2+3=5 3+5=8 7+8=13' ?>

Dat je string:

<?php $str = 'The numbers are 3, 7 and 12'; ?>

Zamenite sve brojeve u stringu njihovim kvadratima.

Očekivani rezultat:

'The numbers are 9, 49 and 144'

Dat je string:

<?php $str = '2023-01-15 2022-12-31 2024-05-20'; ?>

Pretvorite sve datume u format dan.mesec.godina.

Dat je string:

<?php $str = 'Costs: $15, $20, $100'; ?>

Povećajte sve cene za 10%.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij