⊗ppPmRgRCb 260 of 447 menu

Vervanging met 'n Callback deur middel van regex in PHP

Gestel ons het die volgende string:

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

Gestel ons moet alle konstruksies van die vorm nommer+nommer= vind en sorg dat die resultaat van die optelling na die gelykatekens verskyn.

Om so 'n probleem op te los, is dit gerieflik om die funksie preg_replace_callback te gebruik, wat soortgelyk werk aan die funksie preg_replace - dit vind en vervang volgens 'n reguliere uitdrukking, maar dit laat addisionele manipulasies toe met die gevinde stukke.

Die eerste parameter van die funksie is die regex, die tweede - waarmee vervang word, die derde - die string waarin die vervanging plaasvind.

In hierdie geval moet 'n callback-funksie na die tweede parameter oorgedra word, wat vir elke gevinde passing aangeroep sal word.

Die eerste parameter van die callback moet die veranderlike wees waarin die gevindes sal beland. Hierdie veranderlike sal 'n array van die gevinde groepe ("pockets") wees.

Kom ons probeer dit in die praktyk. Skryf die kode wat ons substringe sal vang, terwyl die eerste nommer in die eerste groep geplaas word, en die tweede - in die tweede groep:

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

As gevolg sal ons var_dump drie keer werk, en agtereenvolgens die volgende uitdruk:

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

Ons gaan voort. Elke passing sal vervang word met wat die callback terugstuur deur return. Kom ons vervang as voorbeeld elk van die gesoekte substringe met die teken '!':

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

En nou vervang ons elke substring met die som van die paar nommers daarin:

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

Dit blyk dat ons taak amper opgelos is. Dit bly net om te sorg dat die substring self voor die som van die nommers bly. Om dit te doen sal ons die inhoud van die nulde groep voor die som plaas:

<?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; // sal '2+3=5 3+5=8 7+8=13' uitdruk ?>

Gegee die string:

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

Vervang alle nommers in die string met hul kwadrate.

Verwagte resultaat:

'The numbers are 9, 49 and 144'

Gegee die string:

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

Skakel alle datums om na die formaat dag.maand.jaar.

Gegee die string:

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

Vermeerder alle pryse met 10%.

Afrikaans
AzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ons gebruik koekies vir die werking van die webwerf, ontleding en personalisering. Die verwerking van data geskied volgens die Privaatheidsbeleid.
aanvaar alles instel verwerp