⊗ppPmRgRCb 260 of 447 menu

Penggantian dengan Callback melalui Regex di PHP

Misalkan kita memiliki string berikut:

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

Misalkan kita perlu menemukan semua konstruksi berbentuk angka+angka= dan membuatnya sehingga setelah tanda sama dengan muncul hasil penjumlahannya.

Untuk menyelesaikan tugas seperti ini, mudah untuk menggunakan fungsi preg_replace_callback, yang bekerja mirip dengan fungsi preg_replace - menemukan dan mengganti berdasarkan ekspresi reguler, tetapi memungkinkan untuk melakukan manipulasi tambahan dengan potongan yang ditemukan.

Parameter pertama fungsi menerima regex, parameter kedua - dengan apa menggantinya, parameter ketiga - string, di mana penggantian dilakukan.

Sementara itu, ke parameter kedua harus diteruskan fungsi callback, yang akan dipanggil untuk setiap kecocokan yang ditemukan.

Parameter pertama callback perlu ditentukan variabel, ke mana hasil yang ditemukan akan dimasukkan. Variabel ini akan berupa array dari kelompok tangkapan (capturing group) yang ditemukan.

Mari kita coba dalam praktik. Tuliskan kode, yang akan menangkap substring kita, sementara meletakkan angka pertama di kelompok pertama, dan angka kedua - di kelompok kedua:

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

Hasilnya, var_dump kita akan bekerja tiga kali, secara berurutan menampilkan yang berikut:

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

Kita lanjutkan. Setiap kecocokan akan diganti dengan apa yang dikembalikan oleh callback melalui return. Mari kita sebagai contoh ganti 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 menampilkan '! ! !' ?>

Dan sekarang ganti setiap substring dengan jumlah pasangan angka 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 menampilkan '5 8 13' ?>

Ternyata, tugas kita hampir selesai. Tinggal membuat agar sebelum jumlah angka, substring yang dicari tetap ada. Untuk ini kita akan menyisipkan sebelum jumlah, isi dari kelompok tangkapan nol :

<?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 menampilkan '2+3=5 3+5=8 7+8=13' ?>

Diberikan string:

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

Gantikan semua angka dalam string dengan kuadratnya.

Hasil yang diharapkan:

'The numbers are 9, 49 and 144'

Diberikan string:

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

Ubah semua tanggal ke format hari.bulan.tahun.

Diberikan string:

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

Tingkatkan semua harga sebesar 10%.

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