⊗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
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць