⊗ppPmRgRCb 260 of 447 menu

Penggantian dengan Callback melalui Regex dalam PHP

Katakan kita mempunyai rentetan berikut:

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

Katakan kita perlu mencari semua konstruksi seperti nombor+nombor= dan menjadikannya supaya hasil tambah muncul selepas tanda sama dengan.

Untuk menyelesaikan masalah seperti ini, adalah mudah untuk menggunakan fungsi preg_replace_callback, yang berfungsi sama seperti fungsi preg_replace - mencari dan menggantikan berdasarkan ungkapan biasa, tetapi membolehkan manipulasi tambahan dilakukan serpihan yang ditemui.

Parameter pertama fungsi menerima regex, parameter kedua - dengan apa untuk menggantikan, parameter ketiga - rentetan di mana penggantian dilakukan.

Pada masa yang sama, ke parameter kedua harus diserahkan fungsi callback, yang akan dipanggil untuk setiap padanan yang ditemui.

Parameter pertama callback perlu dinyatakan pembolehubah di mana yang ditemui akan dimasukkan. Pembolehubah ini akan menjadi array subpattern (capturing group) yang ditemui.

Mari cuba dalam praktik. Tulis, kod, yang akan menangkap substring kami, pada masa yang sama meletakkan nombor pertama dalam subpattern pertama, dan yang kedua - dalam subpattern kedua:

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

Hasilnya, var_dump kami akan berfungsi tiga kali, secara berurutan mencetak yang berikut:

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

Kita teruskan. Setiap padanan akan digantikan dengan apa yang dikembalikan oleh callback melalui return. Mari sebagai contoh gantikan setiap substring yang dicari dengan tanda '!':

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

Dan sekarang gantikan setiap substring dengan hasil tambah pasangan nombor di dalamnya:

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

Ternyata tugas kami hampir selesai. Tinggal hanya untuk memastikan bahawa sebelum hasil tambah nombor substring yang dicari kekal. Untuk ini kita akan memasukkan sebelum hasil tambah kandungan subpattern sifar :

<?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; // akan mencetak '2+3=5 3+5=8 7+8=13' ?>

Diberi rentetan:

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

Gantikan semua nombor dalam rentetan dengan kuasa dua mereka.

Hasil yang dijangkakan:

'The numbers are 9, 49 and 144'

Diberi rentetan:

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

Tukar semua tarikh kepada format hari.bulan.tahun.

Diberi rentetan:

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

Tingkatkan semua harga sebanyak 10%.

Melayu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan kuki untuk operasi laman web, analisis dan personalisasi. Pemprosesan data dijalankan mengikut Polisi Kerahsiaan.
terima semua tataletak tolak