Solusinya (yang tidak disebutkan oleh jawaban lain — setidaknya pada saat saya pertama kali menulis ini) adalah bahwa ketika PHP mengacu pada pembatas, itu tidak mengacu pada pembatas yang Anda lihat di kode Anda (yang merupakan tanda kutip) tetapi berikutnya karakter di dalam string. (Sebenarnya saya belum pernah melihat ini dinyatakan di mana pun dalam dokumentasi apa pun: Anda harus melihatnya dalam contoh.) Jadi, alih-alih memiliki sintaks ekspresi reguler seperti yang mungkin biasa Anda lakukan dari banyak bahasa lain:
/something/
PHP menggunakan string, dan kemudian melihat ke dalam string untuk pembatas lain :
'/something/'
Pembatas yang dimaksud PHP adalah pasangan /
karakter, bukan pasangan '
karakter. Jadi jika Anda menulis 'something'
, PHP akan mengambil s
pembatas yang dimaksudkan dan mengeluh bahwa Anda tidak diizinkan menggunakan karakter alfanumerik sebagai pembatas Anda.
Jadi, jika Anda ingin meneruskan (misalnya) i
untuk menunjukkan bahwa Anda menginginkan kecocokan case-insensitve, Anda meneruskannya di dalam string tetapi di luar pembatas regex:
'/something/i'
Jika Anda ingin menggunakan sesuatu selain /
sebagai pembatas, Anda bisa, seperti jika Anda mencocokkan URL dan tidak ingin keluar dari semua garis miring:
'~something~'
preg_match()
sebagai variabel, pastikan Anda tidak mendapatkan urutan variabel yang secara tidak sengaja tercampur dalam pemanggilan fungsi karena ini juga hampir pasti akan menghasilkan hal yang sama. kesalahan muncul.