⊗ppPmRgRCb 260 of 447 menu

Erstatning med tilbakekall via regulære uttrykk i PHP

La oss si at vi har følgende streng:

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

La oss si at vi trenger å finne alle konstruksjoner av typen tall+tall= og gjøre slik at resultatet av addisjonen vises etter likhetstegnet.

For å løse en slik oppgave er det praktisk å bruke funksjonen preg_replace_callback, som fungerer på samme måte som funksjonen preg_replace - finner og erstatter ved hjelp av et regulært uttrykk, men tillater å utføre ytterligere manipulasjoner med de funnete delene.

Den første parameteren funksjonen tar imot er det regulære uttrykket, den andre - hva vi erstatter med, den tredje - strengen der erstatningen utføres.

I den andre parameteren bør man sende en tilbakekallsfunksjon, som vil bli kalt for hvert funnet treff.

Den første parameteren i tilbakekallet må spesifiseres en variabel som de funne resultatene vil havne i. Denne variabelen vil være en matrise av fangete grupper fra det funnete.

La oss prøve i praksis. La oss skrive kode som fanger våre delstrenger, samtidig som det første tallet puttes i den første fangergruppen, og det andre - i den andre:

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

Som et resultat vil vår var_dump kjøre tre ganger, og vise følgende etter hverandre:

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

Vi går videre. Hvert treff vil bli erstattet med det som tilbakekallet returnerer via return. La oss for eksempel erstatte hver av de søkte delstrengene 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 la oss nå erstatte hver delstreng med summen av tallparet 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 seg at oppgaven vår nesten er løst. Det gjenstår å gjøre slik at den søkte delstrengen forblir foran summen av tallene. For å gjøre dette vil vi sette innholdet av den nullte fangergruppen 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' ?>

Gitt en streng:

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

Erstatt alle tall i strengen med deres kvadrater.

Forventet resultat:

'The numbers are 9, 49 and 144'

Gitt en streng:

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

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

Gitt en streng:

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

Øk alle priser med 10%.

Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis