array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'tr', ), 'this' => array ( 0 => 'function.preg-replace.php', 1 => 'preg_replace', ), 'up' => array ( 0 => 'ref.pcre.php', 1 => 'PCRE İşlevleri', ), 'prev' => array ( 0 => 'function.preg-replace-callback.php', 1 => 'preg_replace_callback', ), 'next' => array ( 0 => 'function.preg-split.php', 1 => 'preg_split', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'tr', 'path' => 'reference/pcre/functions/preg-replace.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 4, PHP 5, PHP 7, PHP 8)
preg_replace — Düzenli ifadeye göre dizgede değişiklik yapar
$şablon
,$yenisi
,$konu
,$sınır
= -1,&$değişiklik_sayısı
= null
konu
dizgesini şablon
ile
eşleştirmeye çalışır ve bulduklarını yenisi
ile
değiştirir.
Şablon yerine dizgenin kendisi eşleştirilmek istenirse, bu işlev yerine str_replace() veya str_ireplace() kullanılanılabilir.
şablon
Aranacak şablon. Tek bir dizge olabileceği gibi çok sayıda dizge içeren bir dizi de olabilir.
Ayrıca, PCRE değiştircileri de kullanılabilir.
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
bağımsız değişkende 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
bağımsız değişkeni
\\n
veya
$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
bağımsız değişkeninde tersbölü kullanılacaksa bunların öncelenmesi gerekir
Dizge içersinde yer alan tersbölülerin öncelenmesinin gerekebileceği
unutulmamalıdır.
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.
Artık kullanımı önerilmeyen 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.
Eğer konu
ilişkisel bir dizi ise dönen değerde
anahtarlar korunacaktı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).
değişiklik_sayısı
Belirtildiği takdirde yapılan yer değiştirmelerin sayısı bu bağımsız değişkene konur.
konu
bağımsız değişkeni 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.
"\e" değiştiricisini kullanmak hataya yol açar ve bir
E_WARNING
çıktılanır.
Düzenli ifade şablonu derlendiğinde geçerli bir düzenli ifade haline gelmezse
bir E_WARNING
çıktılanır.
Ö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 jumps over the lazy dog.';
$sablonlar = array();
$sablonlar[0] = '/quick/';
$sablonlar[1] = '/brown/';
$sablonlar[2] = '/fox/';
$yeniler = array();
$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 jumps 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 - 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 5 - değişiklik_sayısı
bağımsız değişkeninin kullanımı
<?php
$sayı = 0;
echo preg_replace(array('/\d/', '/\s/'), '*', 'xp 4 to', -1 , $sayı), "\n";
echo $sayı; //3
?>
Yukarıdaki örneğin çıktısı:
xp***to 3
Bilginize:
şablon
veyenisi
bağımsız değişkenlerinde 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
'unyenisi
'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.
Bilginize:
şablon
veyenisi
bağımsız değişkenlerinin ikisi de dizi ise eşleştirme kuralları sıralı uygulanır. Yani, ikincişablon
/yenisi
çiftine uygulanacak dizge, birincişablon
/yenisi
çiftinin sonucudur, özgün dizge değil. İki değeri takas etmek gibi paralel çalışan değiştirmeler yapılmak istenirse, birşablon
u bir ara yer tutucu ile değiştirip ardından daha sonraki bir çiftte bu aracı yer tutucuyenisi
ile değiştirilebilir.<?php
$p = array('/a/', '/b/', '/c/');
$r = array('b', 'c', 'd');
print_r(preg_replace($p, $r, 'a'));
// d basar
?>