⊗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 файлдарын қолданамыз. Деректерді өңдеу Құпиялылық саясаты бойынша жүреді.
барлығын қабылдау баптау қабылдамау