Regex Nedir ?
Türkçesi düzenli ifade anlamına gelir. Asıl amacı ise metin içeresinde istenilen ifadelerin bir pattern(desen) oluşturularak ulaşması hedeflenir.
Regex Bazı Artıları şunlardır;
- Esnek ve karmaşık aramaları yapabilme
- Her programlama dili tarafından desteklenir
- Dinamik oluşturulan desen(pattern) sayesinde sizi ileride az sorunla karşılaştırır.
Regex cheatsheet(kopya kağıdı) bazı ifadeler için
. yeni satır hariç, tüm karakterler
\w\d\s harf, rakam, boşluk
\W\D\S harf, rakam, boşluk olmayanları alır
[a-z] a ve z arasında bulunan tüm karakterleri alır
[^a-e] a ve e arasında bulunmayan karakterleri alır.
[0-9] 0 ile 9 arasında tüm rakamları alır
? Olabilir ya da olmayabilir
\. \* Özel karakterler için sadece . veya * ifadelerine bakar.
\/ / ifadesini seçer
^a a harfi ile başlayanları alır.String ifadenin başını alır.
m$ m harfi bitenleri alır. String ifadenin sonunu alır.
w{3} 3 tane w harfini al, yani www
PHP Regex Fonksiyonların Kullanımı
preg_match() fonksiyonu, eşleşmesi beklenen ifadeyi string içeresinde arama yapar. Var ise 1 yok ise 0 değerini geri çevirir.
preg_match_all() fonksiyonu, eşleşmesi beklenen ifadeyi string içeresiinde arar ve kaç defa eşleşdiğini gösterir.
preg_replace() fonksiyonu, eşleşen ifade ile size istediğiniz ifade ile değiştirmeyi sağlar.
Şimdi ilk olarak bir string tanımlıyalım.
$str ="+1 (800)-555-2468 http://google.com foot@demo.net https://asimmisirli.com bar.ba@test.co.uk
www.demo.com http://foo.co.uk _+-.,@#$%^&*()\/|<> .COM";
preg_match fonksiyonu ile http ve https url adreslerini bulalım.
patern isimli değişkenimize belirli bir desen(pattern) oluşturulur.
- / ilgili patternler / slashlar arasına yazılır. Fonksiyon yazım kuralı gereği buna uyarız.
- HTTP yada HTTPS almak için s? ifadesini kullandık. Burada ki s? ifadesi s harfi olabilir yada olmayabilir anlamına gelir.
- : iki nokta url içeresinde olduğu için yazdık
- normalde // şeklinde yazılan slashları patern içeresinde böyle yazamayız. Bunları progralama dilinin anlacağı şekil olan \/ \/ şeklinde yazabiliriz. Yani her / ifadesi için \/ böyle tanımlamamız gerekir.
- .* ifadesi https:// yada http:// ifadesinden sonra gelen herşeyi al anlamına gelir.
$pattern ="/https?:\/\/.*/";
echo preg_match($patern,$str);
Ekran çıktımız 1 olacaktır.
preg_match_all() fonksiyonu ile oluşturduğumuz patterni deniyelim. Burada bir detay bulunmaktadır. Bu fonksiyon büyük küçük harf duyarlıdır. i parametresi büyük/küçük ayrımı yapmadan eşleşmesini sağlar.
$pattern ="/https?:\/\//";
$pattern2 = "/.com/i";
echo preg_match_all($pattern,$str);
echo preg_match_all($pattern2,$str);
HTTPS pattern için output 3 olmalıdır. .com ifadesi için ise 4 olmalıdır.
preg_replace() fonksiyonu ile .com ifadeleri .org olarak değiştirelim.
$pattern3 = "/.com/";
echo preg_replace($pattern3,".org",$str);
Aşağıda ki ekran çıktısında ki gibi tüm sonuçlarımız bu şekilde olmalıdır.