preg_replace($pattern, $replacement, $subject) mencari setiap kecocokan regular expression di sebuah string lalu menggantinya. preg_replace('/\s+/', ' ', $text) mengubah setiap deretan spasi, tab, dan baris baru menjadi satu spasi.
String aslinya tidak berubah; preg_replace() mengembalikan string baru. \b menandai batas kata, itulah sebabnya cats tidak ikut diganti.
Backreference: {1} dan \1
Di teks pengganti, $1 mewakili apa pun yang cocok dengan capture group pertama, $2 untuk yang kedua, dan $0 untuk seluruh kecocokan. Pakai ini untuk menyusun ulang teks yang cocok.
Tulis teks pengganti dengan tanda kutip tunggal. Di dalam tanda kutip ganda, "\1" menjadi escape oktal (byte 0x01) dan "${1}" dibaca sebagai variabel bernama 1, yang tidak terdefinisi dan memakai sintaks string yang sudah deprecated sejak PHP 8.2. '\1' dengan tanda kutip tunggal bekerja sama seperti '$1', tetapi $1 adalah penulisan yang umum.
Menghapus karakter non-alfanumerik
Character class yang dinegasikan, [^...], cocok dengan semua yang tidak ada di daftarnya. Menggantinya dengan '' berarti menghapusnya. Untuk teks dalam bahasa lain, pakai class Unicode \p{L} (huruf apa pun) dan \p{N} (angka apa pun) dengan modifier u, kalau tidak, é, ü, dan setiap karakter Jepang akan ikut terhapus.
Membuat slug URL
Beberapa pola berturut-turut bisa mengubah judul menjadi slug URL. Ubah ke huruf kecil dulu, ganti setiap deretan karakter non-alfanumerik dengan satu tanda hubung, lalu buang tanda hubung di kedua ujungnya:
Beberapa pola, limit, dan count
$pattern dan $replacement bisa berupa array: setiap pola diganti dengan pengganti di index yang sama, secara berurutan. Argumen keempat membatasi jumlah penggantian per pola (-1 berarti tanpa batas), dan argumen kelima menerima jumlah penggantian yang dilakukan.
Menghitung pengganti dengan preg_replace_callback
Kalau pengganti bergantung pada kecocokannya, pakai preg_replace_callback(). Fungsi ini memanggil fungsimu sekali untuk setiap kecocokan dengan array $matches dan menyisipkan apa pun yang dikembalikan fungsi itu. Arrow function membuat callback pendek cukup ditulis dalam satu baris.
preg_replace_callback_array() menerima array berisi pasangan pattern => callback saat beberapa pola masing-masing butuh fungsinya sendiri.
Teks pengganti dari variabel
Tanda $ atau backslash di teks pengganti punya arti khusus, jadi pengganti yang berasal dari pengguna atau database bisa rusak. Harga $10 dibaca sebagai referensi ke group 10, yang tidak ada, sehingga hasilnya kosong:
Kalau teks yang dicari maupun penggantinya bukan pola, str_replace() adalah pilihan yang lebih sederhana dan lebih cepat. Untuk menguji pola sebelum mengganti apa pun, lihat preg_match().
Pertanyaan yang sering diajukan
Bagaimana cara memakai backreference di preg_replace?
Rujuk capture group sebagai $1, $2 (atau \1) di teks pengganti: preg_replace('/(\d{4})-(\d{2})-(\d{2})/', '$3/$2/$1', '2026-03-14') mengembalikan "14/03/2026". Tulis teks pengganti dengan tanda kutip tunggal, dan pakai ${1} kalau ada angka tepat setelah referensinya.
Bagaimana cara menghapus semua karakter non-alfanumerik di PHP?
preg_replace('/[^a-zA-Z0-9]/', '', $s) hanya menyisakan huruf dan angka ASCII. Untuk menyimpan huruf dari semua bahasa (é, ü, 日本語), pakai class Unicode dengan modifier u: preg_replace('/[^\p{L}\p{N}]/u', '', $s).
Apa bedanya preg_replace dan preg_replace_callback?
preg_replace() menerima string pengganti yang tetap dengan placeholder $1. preg_replace_callback() memanggil sebuah fungsi untuk setiap kecocokan dan memakai nilai yang dikembalikannya, jadi kamu bisa menghitung penggantinya: mengubahnya ke huruf besar, menghitung sesuatu dengannya, atau mencarinya di sebuah array.
Sebaiknya pakai str_replace atau preg_replace?
Pakai str_replace() saat kamu mengganti teks yang tetap: lebih cepat dan tidak perlu escape. Pakai preg_replace() saat teks yang diganti mengikuti pola, misalnya deretan spasi apa pun, angka apa pun, atau batas kata.
Bagaimana cara mengganti hanya kecocokan pertama dengan preg_replace?
Berikan limit sebagai argumen keempat: preg_replace('/\d+/', '#', 'a1 b2 c3', 1) mengembalikan "a# b2 c3". Argumen kelima, yang dikirim by reference, menerima jumlah penggantian yang dilakukan.