⊗ppPmRgRCb 260 of 447 menu

Замяна с колбек чрез регулярни изрази в PHP

Нека имаме следния низ:

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

Нека трябва да намерим всички конструкции от вида число+число= и да направим така, че след равното да се появи резултатът от събирането.

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

Първият параметър функцията приема регулярния израз, вторият - на какво заменяме, третият - низът, в който се извършва замяната.

При това във втория параметър трябва да се подаде функция-колбек, която ще бъде извикана за всяко намерено съвпадение.

Първият параметър на колбека трябва да се укаже променлива, в която ще попадне намереното. Тази променлива ще представлява масив от групи на намереното.

Нека опитаме на практика. Да напишем код, който да улови нашите поднизове, като същевременно сложи първото число в първата група, а второто - във втората:

<?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']

Продължаваме. Всяко съвпадение ще бъде заменено на това, което колбекът връща чрез 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šuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне