⊗ppPmRgRCb 260 of 447 menu

Erstatning med callback via regulære udtryk i PHP

Lad os sige, at vi har følgende streng:

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

Lad os sige, at vi skal finde alle konstruktioner af typen tal+tal= og gøre sådan, at der efter lighedstegnet vises resultatet af additionen.

For at løse en sådan opgave er det praktisk at bruge funktionen preg_replace_callback, som virker på samme måde som funktionen preg_replace - finder og erstatter via et regulært udtryk, men tillader at udføre yderligere manipulationer med de fundne stykker.

Den første parameter, funktionen accepterer, er det regulære udtryk, den anden - hvad vi erstatter med, den tredje - strengen, hvor erstatningen udføres.

I dette tilfælde skal den anden parameter sendes en callback-funktion, som vil blive kaldt for hver fundne match.

Som den første parameter for callback'en skal du angive en variabel, som det fundne vil blive placeret i. Denne variabel vil være et array med lommer (capturing groups) af det fundne.

Lad os prøve det i praksis. Lad os skrive koden, som vil fange vores understrenge, samtidig med at det første tal lægges i den første lomme, og det andet - i den anden:

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

Som et resultat vil vores var_dump køre tre gange og vise følgende efter tur:

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

Lad os gå videre. Hvert match vil blive erstattet med det, som callback'en returnerer via return. Lad os for eksemplets skyld erstatte hver af de søgte understrenge med tegnet '!':

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

Og lad os nu erstatte hver understreng med summen af talparret i den:

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

Det viser sig, at vores opgave næsten er løst. Det eneste, der mangler, er at gøre sådan, at den søgte understreng forbliver foran summen af tallene. For at gøre dette vil vi indsætte indholdet af den nulte lomme foran summen:

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

Der er givet en streng:

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

Erstat alle tal i strengen med deres kvadrater.

Forventet resultat:

'The numbers are 9, 49 and 144'

Der er givet en streng:

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

Konverter alle datoer til formatet dag.måned.år.

Der er givet en streng:

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

Forøg alle priser med 10%.

Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικά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
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis