⊗ppPmRgRCb 260 of 447 menu

Callbackes csere reguláris kifejezésekkel PHP-ben

Tegyük fel, hogy a következő sztringünk van:

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

Tegyük fel, hogy meg kell találnunk az összes szám+szám= formájú konstrukciót, és azt szeretnénk, hogy az egyenlőségjel után megjelenjen az összeadás eredménye.

Egy ilyen feladat megoldásához kényelmes használni a preg_replace_callback függvényt, amely hasonlóan működik, mint a preg_replace függvény - keres és cserél reguláris kifejezéssel, de lehetővé teszi további manipulációkat az talált részekkel.

Az első paraméterként a függvény egy reguláris kifejezést fogad, a második paraméter azt, mire cseréljük, a harmadik pedig azt a sztringet, amelyben a csere történik.

Ebben az esetben a második paraméternek egy callback függvényt kell átadni, amelyet minden egyes találatra meghívnak.

A callback első paramétereként egy változót kell megadni, amelybe a talált elem kerül. Ez a változó a talált zárójelezett részek (capturing groups) tömbje lesz.

Próbáljuk ki a gyakorlatban. Írjunk kódot, amely elkapja ezeket a részsztringeket, miközben az első számot az első zárójelbe, a másodikat a másodikba teszi:

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

Ennek eredményeképpen a var_dump-unk háromszor fut le, és egymás után kiírja a következőket:

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

Menjünk tovább. Minden egyes találat le lesz cserélve arra, amit a callback a return segítségével visszaad. Cseréljük le például mindegyik keresett részsztringet a '!' jelre:

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

Most pedig cseréljük le minden részsztringet a benne lévő számpár összegére:

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

Tehát a feladatunk majdnem megoldódott. Már csak azt kell elérnünk, hogy a számok összege előtt megmaradjon az eredeti részsztring. Ehhez a nulla indexű zárójel (a teljes találat) tartalmát illesztjük be az összeg elé:

<?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; // kiírja: '2+3=5 3+5=8 7+8=13' ?>

Adott egy sztring:

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

Cserélje le a sztringben lévő összes számot a négyzetükre.

Várt eredmény:

'The numbers are 9, 49 and 144'

Adott egy sztring:

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

Alakítsa át az összes dátumot nap.hónap.év formátumra.

Adott egy sztring:

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

Növelje az összes árat 10%-kal.

Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás