⊗ppPmRgRCb 260 of 447 menu

Zëvendësim me callback përmes regex në PHP

Le të kemi vargun e mëposhtëm:

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

Le të themi se duhet të gjejmë të gjitha konstruksionet e formës numër+numër= dhe t'i bëjmë të tillë që pas shenjës së barazimit të shfaqet rezultati i mbledhjes.

Për të zgjidhur një problem të tillë është e përshtatshme të përdoret funksioni preg_replace_callback, i cili funksionon në mënyrë të ngjashme me funksionin preg_replace - gjen dhe zëvendëson me shprehje të rregullta, por lejon kryerjen e manipulimeve shtesë me pjesët e gjetura.

Parametri i parë i funksionit pranon regex, i dyti - me çfarë të zëvendësohet, i treti - vargu, në të cilin kryhet zëvendësimi.

Në këtë rast, në parametrin e dytë duhet të kalohet funksioni-callback, i cili do të thirret për çdo përputhje të gjetur.

Në parametrin e parë të callback duhet të specifikohet ndryshorja në të cilën do të hyjë e gjetura. Kjo ndryshore do të jetë një array i grupeve të kapura të gjetura.

Le të provojmë në praktikë. Le të shkruajmë kod, që do të kapë nënvargjet tona, duke vendosur numrin e parë në grupin e parë, dhe të dytin - në të dytin:

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

Si rezultat, var_dump-i ynë do të funksionojë tre herë, duke shfaqur radhasi:

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

Vazhdojmë më tej. Çdo përputhje do të zëvendësohet me atë që kthen callback përmes return. Le të zëvendësojmë, për shembull, secilën prej nënvargjeve të kërkuara me shenjën '!':

<?php $str = '2+3= 3+5= 7+8='; $res = preg_replace_callback('#(\d+)\+(\d+)=#', function($match) { return '!'; }, $str); echo $res; // do të shfaqë '! ! !' ?>

Dhe tani le të zëvendësojmë çdo nënvarg me shumën e çiftit të numrave në të:

<?php $str = '2+3= 3+5= 7+8='; $res = preg_replace_callback('#(\d+)\+(\d+)=#', function($match) { return $match[1] + $match[2]; }, $str); echo $res; // do të shfaqë '5 8 13' ?>

Rezulton se detyra jonë është pothuajse e zgjidhur. Mbetet ta bëjmë të tillë që para shumës të mbetet nënvargu i kërkuar. Për këtë do të vendosim përpara shumës përmbajtjen e grupit zero:

<?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; // do të shfaqë '2+3=5 3+5=8 7+8=13' ?>

Është dhënë vargu:

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

Zëvendësoni të gjithë numrat në varg me katrorët e tyre.

Rezultati i pritur:

'The numbers are 9, 49 and 144'

Është dhënë vargu:

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

Shndërroni të gjitha datat në formatin ditë.muaj.vit.

Është dhënë vargu:

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

Rritni të gjitha çmimet me 10%.

Shqip
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ne përdorim cookie për funksionimin e sajtit, analizën dhe personalizimin. Përpunimi i të dhënave bëhet në përputhje me Politikën e Privatësisë.
prano të gjitha konfiguro refuzo