preg_replace

(PHP 4, PHP 5, PHP 7)

preg_replaceDüzenli ifadeye göre dizgede değişiklik yapar

Açıklama

preg_replace ( mixed $şablon , mixed $yenisi , mixed $konu [, int $sınır = -1 [, int &$sayı ]] ) : mixed

konu dizgesini şablon ile eşleştirmeye çalışır ve bulduklarını yenisi ile değiştirir.

Değiştirgeler

şablon

Aranacak şablon. Tek bir dizge olabileceği gibi çok sayıda dizge içeren bir dizi de olabilir.

e değiştiricisi preg_replace() işlevinin, uygun geriye gönderimleri bulduktan sonra yenisi değiştirgesini bir PHP kodu olarak ele almasını sağlar. İpucu: yenisi değiştirgesinin bir PHP kod dizgesi içerdiğinden emin olun, aksi takdirde işlev, satırda bir çözümleme hatası verecektir.

yenisi

Yer değiştirme için kullanılacak dizge veya dizi. Eğer bir dizge belirtilmişse ve şablon bir dizi ise dizideki şablonlarla eşleşen tüm parçalara bu dizge yerleştirilir. Her iki değiştirgede de dizi belirtilmişse her şablon elemanı için kendine karşılık gelen yenisi elemanı yerleştirilir. Eğer yenisi dizisinde daha az eleman varsa, karşılığı olmayan şablon elemanları için boş dizge kullanılır.

yenisi değiştirgesi \\n veya (PHP 4.0.4'ten beri) $n, biçiminde geriye gönderimler içerebilir. Genellikle ikinci biçem tarcih edilir. Böyle her geriye gönderim n'inci yaylı ayraçlı şablon grubuyla yakalanan metne karşılıktır. n 0 ve 99 dahil bu ikisi arasında herhangi bir sayı olabilir ve \\0 veya $0 şablonun tamamıyla eşleşen dizgeye karşılık gelir. Açan yaylı ayraçlar ilki 1 olmak üzere soldan sağa doğru sayılarak bu sayılar yakalayan alt şablonların numaraları olurlar. yenisi değiştirgesinde tersbölü kullanılacaksa bunların öncelenmesi gerekir (PHP dizgesi olarak her tersbölü için "\\\\").

Bir yer değiştirme şablonu ile çalışırken, bir geriye gönderimin hemen ardından başka bir sayının gelmesi durumunda geriye gönderim için alışılagelen \\1 gösterimini kullanamazsınız. Örneğin \\11 için işlev sizin \\1 geriye gönderiminden sonra 1 mi koyduğunuzu yoksa ardına hiçbir sayı konulmamış \\11 geriye gönderimini mi belirttiğinizi bilemeyeceğinden işlev hata verecektir. Böyle bir durumda çözüm \${1}1 kullanmaktır. Böylece $1 geriye gönderimi ardından gelen 1 rakamından yalıtılmış olur.

e değiştiricisi kullanılırken, bu işlev geriye gönderimlerle değiştirilen dizgelerdeki bazı karakterleri (', ", \ ve NULL karakterlerini) tersbölü ile önceler. Bunun böyle yapılmasının sebebi, tek veya çift tırnak içine alınmış geriye gönderimlerin ('strlen(\'$1\')+strlen("$2")' gibi) sözdizimi hatası vermesine engel olmaktır. PHP'nin dizgeleri nasıl yorumladığını anlayabilmek için PHP'nin dizge sözdizimini iyi bilmeniz gerekir.

konu

Şablonun aranacağı yer değiştirmeye konu dizge veya dizi.

Eğer konu bir dizge ise arama ve değiştirme her eleman için ayrı ayrı yapılır ve sonuçlar da bir dizi olarak döndürülür.

sınır

Her konu dizgesinde her şablon için olası azami yer değiştirme sayısı. -1 öntanımlıdır (sınırsız).

sayı

Belirtildiği takdirde yapılan yer değiştirmelerin sayısı bu değiştirgeye konur.

Dönen Değerler

konu değiştirgesi bir dizi ise preg_replace() de bir dizi döndürür aksi takdirde bir dizge döner.

Eşleşmeler bulunduğu takdirde yeni konu döner, aksi takdirde bir hata oluşmamışsa konu değiştirilmeden döndürülür; bir hata oluşmuşsa NULL döner.

Sürüm Bilgisi

Sürüm: Açıklama
5.1.0 sayı değiştirgesi eklendi.
4.0.4 yenisi değiştirgesi için '$n' biçimi eklendi
4.0.2 sınır değiştirgesi eklendi.

Örnekler

Örnek 1 - Ardından bir sayı gelen geriye gönderim kullanımı

<?php
$dizge 
'April 15, 2003';
$şablon '/(\w+) (\d+), (\d+)/i';
$yenisi '${1}1,$3';
echo 
preg_replace($şablon$yenisi$dizge);
?>

Yukarıdaki örneğin çıktısı:

April1,2003

Örnek 2 - preg_replace() ile indisli dizi kullanımı

<?php
$dizge 
'The quick brown fox jumped over the lazy dog.';
$sablonlar[0] = '/quick/';
$sablonlar[1] = '/brown/';
$sablonlar[2] = '/fox/';
$yeniler[2] = 'bear';
$yeniler[1] = 'black';
$yeniler[0] = 'slow';
echo 
preg_replace($sablonlar$yeniler$dizge);
?>

Yukarıdaki örneğin çıktısı:

The bear black slow jumped over the lazy dog.

Şablonlarla yenileri ksorting ile sıralarsak istediğimiz olur.

<?php
ksort
($sablonlar);
ksort($yeniler);
echo 
preg_replace($sablonlar$yeniler$dizge);
?>

Yukarıdaki örneğin çıktısı:

The slow black bear jumped over the lazy dog.

Örnek 3 - Çeşitli değerlerin değiştirilmesi

<?php
$sablonlar 
= array ('/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/',
                   
'/^\s*{(\w+)}\s*=/');
$yeniler = array ('\3/\4/\1\2''$\1 =');
echo 
preg_replace($sablonlar$yeniler'{startDate} = 1999-5-27');
?>

Yukarıdaki örneğin çıktısı:

$startDate = 5/27/1999

Örnek 4 - 'e' değiştiricisinin kullanımı

<?php
preg_replace
("/(<\/?)(\w+)([^>]*>)/e",
             
"'\\1'.strtoupper('\\2').'\\3'",
             
$html_body);
?>

Bu, girdi metnindeki tüm HTML etiketlerini büyük harfli yapacaktır.

Örnek 5 - Boşluk ayıklama

Bu örnekte dizgedeki fazladan boşluklar temizlenmektedir.

<?php
$str 
'foo   o';
$str preg_replace('/\s\s+/'' '$str);
// 'foo o' basılacak
echo $str;
?>

Örnek 6 - sayı değiştirgesinin kullanımı

<?php
$count 
0;

echo 
preg_replace(array('/\d/''/\s/'), '*''xp 4 to', -$sayı);
echo 
$count//3
?>

Yukarıdaki örneğin çıktısı:

xp***to
3

Notlar

Bilginize:

şablon ve yenisi değiştirgelerinde dizi kullanıldığında anahtarlar dizide yer aldıkları sırayla işlenirler. Bunun sayısal indis sırasında olması şart değildir. Hangi şablon'un yenisi'nin ne olacağını indis sırasına göre belirlemek isterseniz preg_replace() işlevini çağırmadan önce her iki diziyi de ksort() işlevinden geçirmelisiniz.

Ayrıca Bakınız