PHP'de Düzenli İfadelerde Özel Karakterlerin Kaçışı
Diyelim ki bir özel karakterin kendisini temsil etmesini istiyoruz. Bunun için ters eğik çizgi kullanarak kaçış yapmamız gerekiyor. Haydi örneklerle görelim.
Örnek
Aşağıdaki örnekte, regex yazarı arama kalıbının şu şekilde olmasını istedi: 'a' harfi,
sonra artı '+', sonra 'x' harfi. Ancak, kod yazarı '+' karakterini
kaçırmadığı için arama kalıbı aslında şu şekilde: 'a' harfi bir veya daha fazla kez, sonra
'x' harfi:
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a+x#', '!', $str);
?>
Sonuç olarak değişkene aşağıdakiler yazılacaktır:
'a+x ! ! !'
Örnek
Şimdi ise yazar artı işaretini ters eğik çizgi ile kaçırdı. Artık arama kalıbı olması gerektiği gibi:
'a' harfi, sonra artı '+', sonra 'x' harfi.
<?php
$str = 'a+x ax aax aaax';
$res = preg_replace('#a\+x#', '!', $str);
?>
Sonuç olarak değişkene aşağıdakiler yazılacaktır:
'! ax aax aaax'
Örnek
Bu örnekte kalıp şu şekilde: 'a' harfi, sonra nokta '.', sonra
'x' harfi:
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a\.x#', '!', $str);
?>
Sonuç olarak değişkene aşağıdakiler yazılacaktır:
'! abx azx'
Örnek
Aşağıdaki örnekte yazar noktayı kaçırmayı unuttu ve regex tüm alt dizelere uydu, çünkü kaçırılmamış nokta herhangi bir karakteri temsil eder:
<?php
$str = 'a.x abx azx';
$res = preg_replace('#a.x#', '!', $str);
?>
Sonuç olarak değişkene aşağıdakiler yazılacaktır:
'! ! !'
Örnek
Dikkat edin, eğer bir nokta için ters eğik çizgiyi unutursanız (kendisini temsil etmesi gerektiğinde) - bunu fark etmeyebilirsiniz bile:
<?php
preg_replace('#a.x#', '!', 'a.x'); // '!' döndürür, istediğimiz gibi
?>
Görsel olarak doğru çalışıyor (çünkü nokta herhangi bir karakteri, sıradan bir '.' noktasını da
temsil eder). Ancak eğer değişiklik yapılan dizgiyi değiştirirsek - hatamızı göreceğiz:
<?php
preg_replace('#a.x#', '!', 'a.x abx azx'); // '! ! !' döndürür, beklenen '! abx azx' idi
?>