Melarikan Aksara Khas dalam Ungkapan Biasa PHP
Katakan kita ingin aksara khas mewakili dirinya sendiri. Untuk ini, ia perlu dilarikan menggunakan garis miring belakang (backslash). Mari kita lihat contoh-contohnya.
Contoh
Dalam contoh berikut, penulis ungkapan biasa ingin
pola carian kelihatan seperti ini: aksara
'a', diikuti dengan tanda tambah '+', kemudian
aksara 'x'. Walau bagaimanapun, penulis kod
tidak melarikan aksara '+' dan oleh itu
pola carian sebenarnya kelihatan seperti ini:
aksara 'a' satu kali atau lebih, kemudian
aksara 'x':
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a+x#', '!', $str);
?>
Hasilnya, yang berikut akan disimpan ke dalam pembolehubah:
'a+x ! ! !'
Contoh
Sekarang penulis telah melarikan tanda tambah dengan
garis miring belakang. Sekarang pola carian kelihatan
seperti yang dikehendaki: aksara 'a', diikuti dengan tanda tambah
'+', kemudian aksara 'x'.
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a\+x#', '!', $str);
?>
Hasilnya, yang berikut akan disimpan ke dalam pembolehubah:
'! ax aax aaax'
Contoh
Dalam contoh ini, polanya kelihatan seperti ini: aksara
'a', diikuti dengan titik '.', kemudian
aksara 'x':
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a\.x#', '!', $str);
?>
Hasilnya, yang berikut akan disimpan ke dalam pembolehubah:
'! abx azx'
Contoh
Dalam contoh seterusnya, penulis lupa untuk melarikan titik dan semua subrentetan dipadankan, kerana titik yang tidak dilarikan mewakili sebarang aksara:
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a.x#', '!', $str);
?>
Hasilnya, yang berikut akan disimpan ke dalam pembolehubah:
'! ! !'
Contoh
Perhatikan bahawa jika anda lupa garis miring belakang untuk titik (apabila ia sepatutnya mewakili dirinya sendiri) - ini mungkin tidak disedari:
<?php
preg_replace('#a.x#', '!', 'a.x'); // mengembalikan '!', seperti yang kita mahukan
?>
Secara visual, ia berfungsi dengan betul (kerana titik
mewakili sebarang aksara, termasuk titik biasa
'.'). Tetapi jika kita menukar rentetan
di mana penggantian berlaku - kita akan melihat
kesilapan kita:
<?php
preg_replace('#a.x#', '!', 'a.x abx azx'); // mengembalikan '! ! !', tetapi dijangkakan '! abx azx'
?>