PHP Düzenli İfadelerde Köşeli Parantez İçinde Tire
Tire - [] içinde özel bir karakterdir
(ancak dışarıda - değildir). Tire'yi bir karakter
olarak kendisi için kullanmak istiyorsanız, onu
bir grup ayırıcısı olarak algılanmayacağı
bir yere koyun.
Bu neden önemli: Farkında olmadan bir karakter
grubu oluşturabilirsiniz. Örneğin, [:-@] -
siz iki nokta üst üste, tire ve @ işaretini
seçtiğinizi düşünürsünüz, ancak aslında
: ile @ arasındaki karakterlerin
grubu oluşur. Bu gruba şu karakterler dahildir:
:, ;, ?, <, =,
>.
Bunlar nereden geliyor? ASCII tablosundan - iki nokta üst üstenin numarası, @ işaretininkinden küçüktür - ve bir grup oluşur. Yani tüm gruplar ASCII tablosuna göre oluşur (isterseniz bundan faydalanabilirsiniz).
Bununla nasıl başa çıkılır: Tire karakterini,
kesinlikle bir grup sembolü olarak algılanmayacağı
bir yere, örneğin başında veya sonunda koyun
(yani ['den sonra veya ]'den önce).
Ayrıca tireyi kaçırabilirsiniz (escape) - o zaman
konumu ne olursa olsun kendisini temsil edecektir.
Örneğin, [:-@] yerine [:\-@] yazın -
ve artık bir grup olmayacak, bunun yerine üç
karakter olacak - iki nokta üst üste, tire ve @ işareti.
Örnek
Aşağıdaki örnekte arama kalıbı şudur:
1 rakamı, ardından 'a' ile
'z' arasında bir harf, ardından 2 rakamı:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a-z]2#', '!', $str);
?>
Sonuç olarak değişkene aşağıdaki yazılacaktır:
'! 1-2 ! !'
Örnek
Şimdi tireyi kaçıralım. Sonuçta arama kalıbı
şudur: 1 rakamı, ardından 'a'
harfi, veya tire, veya 'z' harfi, ardından
2 rakamı:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[a\-z]2#', '!', $str);
?>
Sonuç olarak değişkene aşağıdaki yazılacaktır:
'! ! 1c2 !'
Örnek
Tireyi kaçırmadan sadece yerini değiştirebilirsiniz:
<?php
$str = '1a2 1-2 1c2 1z2';
$res = preg_replace('#1[az-]2#', '!', $str);
?>
Sonuç olarak değişkene aşağıdaki yazılacaktır:
'! ! 1c2 !'
Örnek
Aşağıdaki örnekte arama kalıbı şudur:
ilk karakter - küçük harfler veya tire
'-', ardından iki tane 'x' harfi:
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-z-]xx#', '!', $str);
?>
Sonuç olarak değişkene aşağıdaki yazılacaktır:
'! Axx ! @xx'
Örnek
Aşağıdaki örnekte arama kalıbı şudur:
ilk karakter - küçük harfler, büyük harfler
veya tire '-', ardından iki tane
'x' harfi:
<?php
$str = 'axx Axx -xx @xx';
$res = preg_replace('#[a-zA-Z-]xx#', '!', $str);
?>
Sonuç olarak değişkene aşağıdaki yazılacaktır:
'! ! ! @xx'
Örnek
Tireyi iki grubun arasına yerleştirebilirsiniz - orada kesinlikle başka bir grup oluşturmayacaktır:
<?php
$str = 'axx 9xx -xx @xx';
$res = preg_replace('#[a-z-0-9]xx#', '!', $str);
?>
Sonuç olarak değişkene aşağıdaki yazılacaktır:
'! ! ! @xx'
Pratik Görevler
Bir string veriliyor:
<?php
$str = 'xaz xBz xcz x-z x@z';
?>
Şu kalıba uyan tüm stringleri bulun:
'x' harfi, büyük veya küçük harf
veya tire, 'z' harfi.
Bir string veriliyor:
<?php
$str = 'xaz x$z x-z xcz x+z x%z x*z';
?>
Şu kalıba uyan tüm stringleri bulun:
'x' harfi, ardından dolar işareti, veya
tire veya artı işareti, ardından 'z' harfi.