⊗ppPmRgRCb 260 of 447 menu

Zamenjava s povratnim klicem prek regularnih izrazov v PHP

Recimo, da imamo naslednji niz:

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

Recimo, da moramo najti vse konstrukcije oblike število+število= in narediti tako, da se za enačajem pojavi rezultat seštevanja.

Za rešitev takšnega problema je priročno uporabiti funkcijo preg_replace_callback, ki deluje podobno kot funkcija preg_replace - najde in zamenja z regularnim izrazom, vendar omogoča izvajanje dodatnih manipulacij z najdenimi deli.

Prvi parameter funkcije sprejme regularni izraz, drugi - s čim zamenjamo, tretji - niz, v katerem se izvaja zamenjava.

Poleg tega je treba v drugi parameter posredovati funkcijo povratnega klica, ki bo poklicana za vsako najdeno ujemanje.

Kot prvi parameter povratnega klica je treba določiti spremenljivko, v katero bo prišlo najdeno. Ta spremenljivka bo predstavljala matriko zajetih skupin najdenega.

Poskusimo v praksi. Napišimo kodo, ki bo ujela naše podnize, pri tem pa bo prvo število postavila v prvo skupino, drugo - v drugo:

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

Kot rezultat bo naš var_dump deloval trikrat in zaporedoma izpisal naslednje:

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

Gremo naprej. Vsako ujemanje bo zamenjano s tem, kar povratni klic vrne prek return. Za primer zamenjajmo vsakega od iskanih podnizov z znakom '!':

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

Zdaj pa zamenjajmo vsak podniz z vsoto para števil v njem:

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

Izkazalo se je, da je naša naloga skoraj rešena. Ostalo je še narediti tako, da pred vsoto števil ostane iskani podniz. Za to bomo pred vsoto vstavili vsebino ničelne skupine:

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

Dan niz:

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

Zamenjajte vsa števila v nizu z njihovimi kvadrati.

Pričakovan rezultat:

'The numbers are 9, 49 and 144'

Dan niz:

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

Pretvorite vse datume v format dan.mesec.leto.

Dan niz:

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

Povečajte vse cene za 10%.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni