Escape Karakter Khusus dalam Regex PHP
Anggaplah kita ingin membuat karakter khusus mewakili dirinya sendiri. Untuk itu karakter tersebut perlu di-escape menggunakan backslash. Mari kita lihat contohnya.
Contoh
Dalam contoh berikut, penulis regex menginginkan
pola pencarian terlihat seperti: huruf
'a', lalu tanda plus '+', lalu
huruf 'x'. Namun, penulis kode
tidak meng-escape karakter '+' sehingga
pola pencarian sebenarnya terlihat seperti:
huruf 'a' satu kali atau lebih, kemudian
huruf 'x':
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a+x#', '!', $str);
?>
Hasilnya, yang tersimpan di variabel adalah sebagai berikut:
'a+x ! ! !'
Contoh
Sekarang penulis meng-escape tanda plus dengan
backslash. Sekarang pola pencarian terlihat
seperti yang diinginkan: huruf 'a', lalu tanda plus
'+', lalu huruf 'x'.
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a\+x#', '!', $str);
?>
Hasilnya, yang tersimpan di variabel adalah sebagai berikut:
'! ax aax aaax'
Contoh
Dalam contoh ini, polanya terlihat seperti: huruf
'a', lalu titik '.', lalu
huruf 'x':
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a\.x#', '!', $str);
?>
Hasilnya, yang tersimpan di variabel adalah sebagai berikut:
'! abx azx'
Contoh
Dalam contoh berikutnya, penulis lupa meng-escape slash dan regex mencocokkan semua substring, karena titik yang tidak di-escape mewakili karakter apa pun:
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a.x#', '!', $str);
?>
Hasilnya, yang tersimpan di variabel adalah sebagai berikut:
'! ! !'
Contoh
Perhatikan bahwa jika Anda lupa backslash untuk titik (ketika seharusnya ia mewakili dirinya sendiri) - hal ini mungkin tidak terlihat:
<?php
preg_replace('#a.x#', '!', 'a.x'); // mengembalikan '!', seperti yang kita inginkan
?>
Secara visual berjalan dengan benar (karena titik
mewakili karakter apa pun, termasuk titik biasa
'.'). Tetapi jika string yang diganti
diubah - kita akan melihat kesalahan kita:
<?php
preg_replace('#a.x#', '!', 'a.x abx azx'); // mengembalikan '! ! !', sedangkan yang diharapkan '! abx azx'
?>