⊗ppPmRgEP 254 of 447 menu

Penggunaan Backreference dalam Ungkapan Biasa di PHP

Kandungan backreference bukan sahaja boleh diakses dalam talian penggantian, tetapi juga dalam ungkapan biasa itu sendiri: kita boleh meletakkan sesuatu ke dalam backreference, dan kemudian terus dalam ungkapan biasa menyatakan bahawa di sini mesti terdapat kandungan backreference tersebut.

Kandungan backreference boleh diakses melalui nombornya, dengan garis sendeng belakang di depannya. Sebagai contoh, backreference sifar boleh diakses seperti ini: \0, backreference pertama seperti ini - \1, yang kedua - \2 dan seterusnya.

Saya yakin bahawa semua yang ditulis di atas masih agak kabur untuk anda. Ini tidak menghairankan, memandangkan backreference adalah bahagian ungkapan biasa yang paling sukar difahami. Mari kita fahami melalui contoh.

Contoh

Katakan kita mempunyai tali seperti berikut:

<?php $str = 'aa bb cd ef'; ?>

Mari cari semua tempat dalam tali tersebut di mana terdapat dua huruf yang sama berturut-turut. Untuk menyelesaikan masalah ini, kita akan mencari sebarang huruf, memasukkan ke dalam backreference, dan kemudian memeriksa sama ada karakter seterusnya adalah kandungan backreference tersebut:

<?php $res = preg_replace('#([a-z])\1#', '!', $str); ?>

Hasilnya, yang berikut akan disimpan ke dalam pembolehubah:

'! ! cd ef'

Contoh

Katakan kita mempunyai tali seperti berikut:

<?php $str = 'asxca buzxb csgd'; ?>

Mari cari semua perkataan di dalamnya yang mana huruf pertama dan terakhir adalah sama. Untuk menyelesaikan masalah ini, kita akan tulis corak berikut: huruf, diikuti oleh satu atau lebih huruf, dan kemudian huruf yang sama seperti huruf pertama:

<?php $res = preg_replace('#([a-z])[a-z]+\1#', '!', $str); ?>

Hasilnya, yang berikut akan disimpan ke dalam pembolehubah:

'! ! csgd'

Contoh

Selain \1, kita boleh menulis \g1:

<?php $res = preg_replace('#([a-z])[a-z]+\g1#', '!', $str); ?>

Contoh

Kita juga boleh menulis \g{1}:

<?php $res = preg_replace('#([a-z])[a-z]+\g{1}#', '!', $str); ?>

Contoh

Dalam kurungan kerawang, kita boleh menentukan nombor negatif. Dalam kes ini, backreference akan dikira dari akhir:

<?php $res = preg_replace('#([a-z])([a-z])\g{-2}#', '!', $str); ?>

Masalah Praktikal

Diberi tali:

<?php $str = 'aaa bbb ccc xyz'; ?>

Cari semua subrentetan yang mengandungi tiga huruf yang sama berturut-turut.

Diberi tali:

<?php $str = 'a aa aaa abab bbbb'; ?>

Cari semua subrentetan yang mengandungi dua atau lebih huruf yang sama berturut-turut.

Diberi tali:

<?php $str = 'aaa aaa bbb bbb ccc ddd'; ?>

Cari semua subrentetan yang mengandungi dua perkataan yang sama berturut-turut.

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