⊗ppPmRgRCb 260 of 447 menu

Aizstāšana ar atzvanījuma funkciju regulārajās izteiksmēs PHP

Pieņemsim, ka mums ir šāda virkne:

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

Pieņemsim, ka mums ir jāatrod visas konstrukcijas, kuras izskatās kā skaitlis+skaitlis= un jāpanāk, ka pēc vienādības zīmes parādās saskaitīšanas rezultāts.

Lai atrisinātu šādu uzdevumu, ir ērti izmantot funkciju preg_replace_callback, kas strādā līdzīgi kā funkcija preg_replace - atrod un aizstāj ar regulāro izteiksmi, bet ļauj veikt papildu manipulācijas ar atrastajām daļiņām.

Pirmo parametru funkcija pieņem regulāro izteiksmi, otro - ar ko aizstājam, trešo - virkni, kurā tiek veikta aizstāšana.

Šajā gadījumā otrajā parametrā vajadzētu padot atzvanījuma funkciju, kas tiks izsaukta katram atrastajam atbilstībam.

Pirmajam atzvanījuma funkcijas parametram jānorāda mainīgais, kurā nonāks atrastais. Šis mainīgais būs atrasto atbilstību apakšgrupu masīvs.

Izmēģināsim praksē. Uzrakstīsim kodu, kurs noķers mūsu apakšvirknes, vienlaikus ieliekot pirmo skaitli pirmajā apakšgrupā, bet otro - otrajā:

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

Rezultātā mūsu var_dump nostrādās trīs reizes, pēc kārtas izvadot sekojošo:

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

Ejam tālāk. Katra atbilstība tiks aizstāta ar to, ko atzvanījuma funkcija atgriež ar return. Piemēram, aizstāsim katru no meklētajām apakšvirknēm ar zīmi '!':

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

Un tagad aizstāsim katru apakšvirkni ar skaitļu pāra summu tajā:

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

Izrādās, ka mūsu uzdevums ir gandrīz atrisināts. Atliek tikai panākt, ka pirms skaitļu summas paliek meklētā apakšvirkne. Lai to izdarītu, ievietosim pirms summas nulles apakšgrupas saturu:

<?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; // izvadīs '2+3=5 3+5=8 7+8=13' ?>

Dota virkne:

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

Aizstājiet visus skaitļus virknē ar to kvadrātiem.

Gaidāmais rezultāts:

'The numbers are 9, 49 and 144'

Dota virkne:

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

Pārveidojiet visus datumus formātā diena.mēnesis.gads.

Dota virkne:

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

Palieliniet visas cenas par 10%.

Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt