preg_replace($pattern, $replacement, $subject) bir dizgede bir düzenli ifadenin her eşleşmesini bulur ve değiştirir. preg_replace('/\s+/', ' ', $text) her boşluk, sekme ve yeni satır dizisini tek bir boşluğa çevirir.
Orijinal dizge değişmez; preg_replace() yeni bir dizge döndürür. \b bir kelime sınırını işaretler, cats kelimesine dokunulmamasının nedeni budur.
Geri referanslar: {1} ve \1
Değiştirme metninde $1 ilk yakalama grubunun eşleştiği şeyi, $2 ikincisini ve $0 eşleşmenin tamamını temsil eder. Eşleşen metni yeniden düzenlemek için onları kullanın.
Değiştirme metnini tek tırnak içinde yazın. Çift tırnak içinde "\1" bir sekizlik kaçışa (0x01 baytı) dönüşür ve "${1}" adı 1 olan bir değişken olarak okunur; bu değişken tanımsızdır ve PHP 8.2'den beri kullanımdan kaldırılmış bir dizge söz dizimi kullanır. Tek tırnak içinde '\1' '$1' ile aynı çalışır, ama yaygın yazım $1 şeklindedir.
Alfanümerik olmayan karakterleri silme
Olumsuzlanmış bir karakter sınıfı [^...] listelenmemiş her şeyle eşleşir. Onu '' ile değiştirmek siler. Diğer dillerdeki metinler için u değiştiricisiyle \p{L} (herhangi bir harf) ve \p{N} (herhangi bir rakam) Unicode sınıflarını kullanın, yoksa é, ü ve her Japonca karakteri silersiniz.
URL slug oluşturma
Art arda birkaç kalıp bir başlığı bir URL slug'ına çevirir. Önce küçük harfe çevirin, alfanümerik olmayan her karakter dizisini tek bir tireyle değiştirin, sonra uçlardaki tireleri kırpın:
Birkaç kalıp, bir limit ve bir sayım
$pattern ve $replacement dizi olabilir: her kalıp sırayla aynı indeksteki değiştirme metniyle değiştirilir. Dördüncü argüman kalıp başına değiştirmeleri sınırlar (-1 sınırsız demektir) ve beşincisi kaç değiştirme yapıldığını alır.
preg_replace_callback ile değiştirmeyi hesaplama
Değiştirme eşleşmeye bağlı olduğunda preg_replace_callback() kullanın. Fonksiyonunuzu her eşleşme için bir kez $matches dizisiyle çağırır ve fonksiyonun döndürdüğünü ekler. Bir ok fonksiyonu kısa geri çağırmaları tek satırda tutar.
Birkaç kalıbın her biri kendi fonksiyonunu gerektirdiğinde preg_replace_callback_array() pattern => callback çiftlerinden oluşan bir dizi alır.
Bir değişkenden gelen değiştirme metni
Değiştirme metnindeki bir $ veya ters eğik çizginin bir anlamı vardır, bu yüzden bir kullanıcıdan veya veritabanından gelen bir değiştirme metni bozulabilir. $10 fiyatı var olmayan 10. gruba bir referans olarak okunur ve boş çıkar:
Ne aranan metin ne de değiştirme metni bir kalıp olmadığında str_replace() daha basit ve daha hızlı seçimdir. Bir şeyi değiştirmeden önce bir kalıbı test etmek için preg_match() sayfasına bakın.
Sıkça Sorulan Sorular
preg_replace içinde geri referansları nasıl kullanırım?
Değiştirme metninde yakalama gruplarına $1, $2 (veya \1) olarak başvurun: preg_replace('/(\d{4})-(\d{2})-(\d{2})/', '$3/$2/$1', '2026-03-14') "14/03/2026" döndürür. Değiştirme metnini tek tırnak içinde yazın ve referansın ardından bir rakam geliyorsa ${1} kullanın.
PHP'de alfanümerik olmayan tüm karakterleri nasıl silerim?
preg_replace('/[^a-zA-Z0-9]/', '', $s) yalnızca ASCII harfleri ve rakamları tutar. Her dilin harflerini (é, ü, 日本語) tutmak için u değiştiricisiyle Unicode sınıflarını kullanın: preg_replace('/[^\p{L}\p{N}]/u', '', $s).
preg_replace ile preg_replace_callback arasındaki fark nedir?
preg_replace() $1 yer tutuculu sabit bir değiştirme dizgesi alır. preg_replace_callback() her eşleşme için bir fonksiyon çağırır ve onun dönüş değerini kullanır, böylece değiştirmeyi hesaplayabilirsiniz: büyük harfe çevirmek, onunla işlem yapmak ya da bir dizide aramak.
str_replace mi yoksa preg_replace mi kullanmalıyım?
Sabit bir metni değiştirirken str_replace() kullanın: daha hızlıdır ve kaçışlama gerektirmez. Değiştirilecek metin bir kalıba uyduğunda, örneğin herhangi bir boşluk dizisi, herhangi bir rakam veya bir kelime sınırı, preg_replace() kullanın.
preg_replace ile yalnızca ilk eşleşmeyi nasıl değiştiririm?
Dördüncü argüman olarak bir limit verin: preg_replace('/\d+/', '#', 'a1 b2 c3', 1) "a# b2 c3" döndürür. Referansla verilen beşinci argüman yapılan değiştirme sayısını alır.