⊗ppPmRgRCb 260 of 447 menu

Иваз кардан бо callback тавассути регулярӣ дар PHP

Бигзор мо сатри зеринро дошта бошем:

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

Бигзор ба мо лозим аст, ки ҳамаи сохторҳои намуди рақам+рақам=-ро ёбем ва тавре созем, ки пас аз баробар натиҷаи ҷамъ пайдо шавад.

Барои ҳалли ин намуд мушкилот истифодаи функсияи preg_replace_callback муносиб аст, ки ба монанди функсияи preg_replace кор мекунад - бо regular expression меёбад ва иваз мекунад, аммо имконияти иҷрои манипулятсияҳои иловагӣ бо порчаҳои ёфташударо медиҳад.

Параметри якум функсия regular expression-ро қабул мекунад, дуввум - ба чӣ иваз мекунем, сеюм - сатр, ки дар он иваз амалӣ карда мешавад.

Дар ин ҳол ба параметри дуюм бояд функсияи callback-ро гузаронд, ки барои ҳар як мувофиқати ёфташуда фарохонда мешавад.

Барои параметри якуми callback тағирёбандаеро муайян кардан лозим аст, ки ёфташуда ба он хоҳад афтод. Ин тағирёбанда массави pockets-ҳои ёфташуда хоҳад буд.

Биёед дар амал санҷем. Кодеро менависем, ки зерҳангҳои моро бигирад, дар ин ҳол рақами аввалро дар pocket-и якум, рақами дуюмро дар pocket-и дуюм гузошт:

<?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'-ро чоп мекунад ?>

Маълум мешавад, ки мушкили мо қариб ҳал шудааст. Танҳо бояд тавре созем, ки пеш аз ҷамъи рақамҳо зерҳанги дарёфташуда боқӣ бимонад. Барои ин пеш аз ҷамъ мундариҷаи pocket-и сифрро гузорем:

<?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 истифода мебарем. Коркарди маълумот мувофиқи Сиёсати махфият сурат мегирад.
ҳамаро қабул кардан танзим кардан рад кардан