REGEX Nedir ? PHP ile Regex Nasıl Kullanılır ?
Regex, bir arama modeli oluşturan karakter dizisidir. Bir metinde veri aradığınızda, aradığınızı tanımlamak için bu arama modelini kullanabilirsiniz.
Normal bir ifade, tek bir karakter veya daha karmaşık bir kalıp olabilir.
Her türden metin arama ve metin değiştirme işlemlerini gerçekleştirmek için Regular Expressions (normal ifadeler) kullanılabilir.
Syntax – Sözdizimi
PHP’de normal ifadeler, sınırlayıcılardan, bir örüntüden ve isteğe bağlı değiştiricilerden oluşan dizelerdir.
$ornek = "/masterdark/i";
Yukarıdaki örnekte “/” karakteri sınırlayıcı görevindedir. Belirtecin sonunda ki “/” karakterinden sonra gelen “i” karakteri aranan dizenin büyük küçük harfe duyarlı hale gelmesi anlamını taşır.
Sınırlayıcı, harf, sayı, ters eğik çizgi veya boşluk olmayan herhangi bir karakter olabilir. En yaygın sınırlayıcı eğik çizgidir (/), ancak deseniniz eğik çizgi içerdiğinde # veya ~ gibi diğer sınırlayıcıları seçmek daha uygundur.
Regex Functions – Regex İşlevleri
PHP, normal ifadeleri kullanmanıza izin veren çeşitli işlevler sağlar. Preg_match (), preg_match_all () ve preg_replace () işlevleri en yaygın kullanılanlardan bazılarıdır:
Fonksiyonlar | Görevleri |
preg_match() | Eşleşme sağlanırsa geriye 1 , eşleşme sağlanmazsa geriye 0 döndürür.(return callback is 1 or 0) |
preg_match_all() | Desenin string içerisinde kaç kez bulunduğunu döndürür bu da 0 olabilir. |
preg_replace() | Desenin string içerisinde bulduğunda yeni string ile değiştirir, işlem sonunda değişen halini geri döndürür.. |
Preg_match() Kullanımı
Preg_match () işlevi, bir dizgenin desen eşleşmeleri içerip içermediğini döndürecektir.
<?php
$cumle = "Masterdark.net webin yeni yüzü";
$desen = "/masterdark/i";
echo preg_match($desen, $cumle); // Çıktı 1
?>
Cümlenin içerisinde masterdark sözcüğünün varlığını büyük harf küçük harf duyarlılığı ile kontrol edecektir. (i bayrağı büyük küçük harf duyarlılığını sağlar.)
Preg_match_all() Kullanımı
Preg_match_all() işlevi , bir metnin içerisinde desen eşleşmelerinin sayısını döndürecektir.
<?php
$cumle = "Ankara'ya bugün de kAr yağdı.";
$desen = "/ar/i";
echo preg_match_all($desen, $cumle); // Çıktı 2
?>
Preg_replace() Kullanımı
Preg_replace () işlevi, bir dizedeki örüntüdeki tüm eşleşmeleri başka bir dizeyle değiştirir.
<?php
$cumle = "Facebook bugün yeni üyelik rekorunu kırdı.";
$desen = "/facebook/i";
echo preg_replace($desen, "MasterDark.net", $cumle); // Çıktı "Masterdark.net bugün yeni üyelik rekorunu kırdı."
?>
Regex Değiştiriciler
Değiştiriciler, bir aramanın nasıl gerçekleştirileceğini değiştirebilir.
Değiştirici | Açıklama |
i | Büyük / küçük harfe duyarlı olmayan bir arama gerçekleştirir |
m | Çok satırlı bir arama gerçekleştirir (bir dizenin başlangıcını veya sonunu arayan desenler, her satırın başlangıcı veya sonuyla eşleşir) |
u | UTF-8 kodlu kalıpların doğru eşleşmesini sağlar |
Regex Kalıpları
Parantezler, bir dizi karakter bulmak için kullanılır:
İfade | Açıklama |
[abc] | Parantezler arasındaki seçeneklerden bir karakter bulun |
[^abc] | Parantez içinde OLMAYAN herhangi bir karakteri bulun |
[0-9] | 0 – 9 aralığında bir karakter bulun |
Meta Karakterler
Metakarakterler, özel bir anlamı olan karakterlerdir:
Meta Karakterler | Açıklama |
| | | İle ayrılmış modellerden herhangi biri için bir eşleşme bulun olduğu gibi: kedi | köpek | balık |
. | Herhangi bir karakterin yalnızca bir örneğini bulun |
^ | Bir dizenin başlangıcı olarak bir eşleşme bulur: ^ Merhaba |
$ | Aşağıdaki gibi dizenin sonunda bir eşleşme bulur: Dünya $ |
\d | Bir rakam bul |
\s | Bir boşluk bul |
\b | Şuna benzer bir kelimenin başında bir eşleşme bulun: \bDÜNYA veya şuna benzer bir kelimenin sonunda: DÜNYA\b |
\uxxx | Xxxx onaltılık sayı(hexadecimal) ile belirtilen Unicode karakterini bulun |
Niceleyiciler
Nicelik belirteci | Açıklama |
n+ | En az bir n içeren herhangi bir dizeyle eşleşir |
n* | N’nin sıfır veya daha fazla oluşumunu içeren herhangi bir dizeyle eşleşir |
n? | N’nin sıfır veya bir oluşumunu içeren herhangi bir dizeyle eşleşir |
n{X} | Bir X n dizisi içeren herhangi bir dizeyle eşleşir |
n{X,Y} | X’den Y n ‘ e kadar olan bir dizi içeren herhangi bir dizeyle eşleşir |
n{X,} | En az Xn dizisi içeren herhangi bir dizeyle eşleşir |
Not: İfadenizin özel karakterlerden birini araması gerekiyorsa, onlardan kaçınmak için ters eğik çizgi (\) kullanabilirsiniz. Örneğin, bir veya daha fazla soru işaretini aramak için aşağıdaki ifadeyi kullanabilirsiniz: $desen = '/\?+/';
Gruplama
Tüm modellere nicelik belirteçleri uygulamak için parantezleri () kullanabilirsiniz. Aynı zamanda eşleşme olarak kullanılacak modelin bölümlerini seçmek için de kullanılabilirler.
<?php
$cumle = "Saatler ve yelkovanlar.";
$desen = "/s(a){2}t/i";
echo preg_match($desen, $cumle); // Çıktı 1
?>
Örneklerle Regex
Bir ifadenin mail adresi olup olmadığını sorgulayan desen
if (preg_match("/[-0-9a-zA-Z.+_]+@[-0-9a-zA-Z.+_]+.[a-zA-Z]{2,4}/", $emailAddress)){
//Email adresi geçerli
}else{
//email adresi geçersiz
}
Bir ifadenin url olup olmadığını sorgulama
if(preg_match("/^((https|http)\:\/\/)?([a-z0-9A-Z]+\.[a-z0-9A-Z]+\.[a-z0-9A-Z]+\.[a-zA-Z]{2,4}|[a-z0-9A-Z]+\.[a-z0-9A-Z]+\.[a-zA-Z]{2,4}|[a-z0-9A-Z]+\.[a-zA-Z]{2,4})$/i", $url)){
// geçerli url adresi
}
Boş ifade kontrolü
^\s*$
Telefon numarası doğrulama
^[\\(]\d{3}[\\)]\s\d{3}-\d{4}$
Kredi Kartı Doğrulama
// mastercard
^(?:5[1–5][0–9]{2}|222[1–9]|22[3–9][0–9]|2[3–6][0–9]{2}|27[01][0–9]|2720)[0–9]{12}$
// visacard
^4[0–9]{12}(?:[0–9]{3})?$