⊗ppPmRgRCb 260 of 447 menu

Замена со callback преку регуларни изрази во PHP

Да претпоставиме дека ја имаме следната низа:

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

Да претпоставиме дека треба да ги најдеме сите конструкции од видот број+број= и да направиме така што после знакот за еднакво ќе се појави резултатот од собирањето.

За решавање на вакви задачи е погодно да се користи функцијата preg_replace_callback, која работа на сличен начин како функцијата preg_replace - наоѓа и заменува со регуларен израз, но овозможува извршување на дополнителни манипулации со пронајдените делови.

Како прв параметар функцијата прима регуларен израз, како втор - на што да се замени, како трет - низата, во која се врши замената.

При тоа, во вториот параметар треба да се пренесе callback-функција, која ќе се повикува за секој пронајден совпаѓање.

Како прв параметар на callback-от треба да се наведе променливата во која ќе се сместува пронајденото. Оваа променлива ќе претставува низа на групи (кармани) на пронајденото.

Ајде да пробаме во пракса. Да напишеме код, кој ќе ги фати нашите поднизи, притоа сместувајќи го првиот број во првата група, а вториот - во втората:

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

Како резултат, нашиот var_dump ќе работи три пати, прикажувајќи последователно го следново:

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

Продолжуваме понатаму. Секое совпаѓање ќе биде заменето со она што callback-от го враќа преку return. Ајде за пример да ја замениме секоја од бараните поднизи со знакот '!':

<?php $str = '2+3= 3+5= 7+8='; $res = preg_replace_callback('#(\d+)\+(\d+)=#', function($match) { return '!'; }, $str); echo $res; // ќе испечати '! ! !' ?>

А сега да ја замениме секоја подниза со збирот на парот броеви во неа:

<?php $str = '2+3= 3+5= 7+8='; $res = preg_replace_callback('#(\d+)\+(\d+)=#', function($match) { return $match[1] + $match[2]; }, $str); echo $res; // ќе испечати '5 8 13' ?>

Излегува дека нашата задача е скоро решена. Останува само да направиме така што пред збирот на броевите ќе остане бараната подниза. За ова ќе вметнеме пред збирот содржината на нултата група (карман):

<?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; // ќе испечати '2+3=5 3+5=8 7+8=13' ?>

Дадена е низата:

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

Заменете ги сите броеви во низата со нивните квадрати.

Очекуван резултат:

'The numbers are 9, 49 and 144'

Дадена е низата:

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

Преобразувајте ги сите дати во формат ден.месец.година.

Дадена е низата:

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

Зголемете ги сите цени за 10%.

Македонски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј