Regular Expression ve PHP

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.

Yorum yapın