⊗ppPmRgRCb 260 of 447 menu

Sostituzione con callback tramite espressioni regolari in PHP

Supponiamo di avere la seguente stringa:

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

Supponiamo di dover trovare tutte le costruzioni della forma numero+numero= e fare in modo che dopo il segno uguale appaia il risultato dell'addizione.

Per risolvere questo tipo di problema è conveniente utilizzare la funzione preg_replace_callback, che funziona in modo analogo alla funzione preg_replace - trova e sostituisce in base a un'espressione regolare, ma permette di eseguire manipolazioni aggiuntive con i frammenti trovati.

Il primo parametro della funzione accetta l'espressione regolare, il secondo - con cosa sostituire, il terzo - la stringa in cui viene effettuata la sostituzione.

In questo caso, nel secondo parametro si deve passare una funzione di callback, che verrà chiamata per ogni corrispondenza trovata.

Il primo parametro del callback deve essere una variabile in cui verrà inserito il risultato trovato. Questa variabile sarà un array dei gruppi di cattura (backreference) trovati.

Proviamo nella pratica. Scriviamo il codice che catturerà le nostre sottostringhe, mettendo il primo numero nel primo gruppo e il secondo - nel secondo:

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

Di conseguenza, il nostro var_dump funzionerà tre volte, visualizzando in sequenza:

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

Andiamo avanti. Ogni corrispondenza sarà sostituita con ciò che il callback restituisce tramite return. Facciamo un esempio e sostituiamo ciascuna delle sottostringhe cercate con il simbolo '!':

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

E ora sostituiamo ogni sottostringa con la somma dei due numeri in essa contenuti:

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

Risulta che il nostro compito è quasi risolto. Resta da fare in modo che prima della somma dei numeri rimanga la sottostringa cercata. Per farlo, inseriremo prima della somma il contenuto del gruppo zero (l'intera corrispondenza):

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

Data la stringa:

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

Sostituisci tutti i numeri nella stringa con i loro quadrati.

Risultato atteso:

'The numbers are 9, 49 and 144'

Data la stringa:

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

Converti tutte le date nel formato giorno.mese.anno.

Data la stringa:

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

Aumenta tutti i prezzi del 10%.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta