10 Ekim 2012

Regular Expressions -Düzenli Diller



. -> nokta karakteri string icerisinde bütün karakterler yerine kullanılabilir.
Örnek: B.rs. ->Bursa, Barsd,B3rsh...
[ ] ->nokta gibi hareket eder. Ancak parantez içerisine yazacağımız karakterler ile sınırlandırılır.
Örnek: B[u1re]rsa->Bursa,B1rsa,Brrsa veya Bersa
[1-9] -> 1'den 9'a kadar olan rakamlardan birini kullanmak istiyorsak, araya “-” işareti koyarak sınırı belirleyebiliriz.
Örnek: Bursa[1-9] ->Bursa1,Bursa2...
Örnek: Burs[a-z] ->Bursa,Bursb,Bursc... (parantez icerisindeki küçük harfe dikkat)
Örnek: Burs[a-z1-9A-Z]->Burs1,Burs7,BursA,Bursz...

? ->Kendisinden bir önceki karakteri seçilebilir hale getirir.
Örnek: Bur?sa-> Busa veya Bursa
* ->Kendisinden bir önce gelen karakteri 0 veya sonsuz sayıda tekrarlayabilir.
Örnek:Bursa*->Burs,Bursa,Bursaa,Bursaaaaaaa...
+ -> Önceki karakterin en az bir veya çok sayıda tekrar edebileceğini ifade eder.
Örnek: Bur+ ->Burs,Bursb,Bursaspor,Burdddd ...
{n} ->bir önceki karakteri “n” kadar tekrar eder. (n=1 veya n > 1 olması koşulu ile)
Örnek: Bur{3}s{2}a ->Burrrssa

{n,m} ->bir önceki karakter n ile m arasında bir sayı kadar tekrar edebilir. ( m>n ve n >=1 olması koşulu ile)
Örnek: Bursa{2,4} ->Bursaa,Bursaaa,Bursaaaa

{n, } ->bir önceki karakter en az n kere tekrar etmeli.
Örnek: Bursa{1, }->Bursa,Bursaa,Bursaaa...
( ) ->gruplama.
Örnek: (Heykel | Setbaşı) ->Heykel veya Setbaşı

[^] ->gruptaki herhangibir karakter hariç
Örnek: [^358sde]ursa ->Mursa,bursa,gursa kabul edilebilir ancak 3ursa,sursa kabul edilmez.


Karakter etiketleri
Regular expression yazımını daha kolay hale getirmek için yapılmış bir güzellik.
\d ->herhangi bir rakam olabilir. ->[0-9] ile aynıdır.
\D->rakam olmayan karakter ->[^0-9] ile aynıdır.
\w ->her hangi bir harf,rakam veya alt çizgi ->[a-zA-Z0-9_] ile aynıdır
\W->\w ifadesinin dışında kalan karakterler->[^a-zA-Z0-9_] ile aynı.
\s ->Herhangi bir boşluk karakteri [ \t\n\r\f].
\S- >Boşluk karakteri olmayan [^\t\n\r\f].


Örnek Kullanımlar:
  • E-posta adresi geçerli mi değil mi ?
    Regex: [A-Z0-9a-z_-]{1,}@[A-Z0-9a-z]{1,}\.(com|net|org) gibi bir düzenli ifade basit bir e-posta doğrulaması (sonu com,net veya org ile biten epostalar) için yeterli. Zaten internette arama yapıldığında doğrulama konularında dolusuyla site çıktığı için uzun bir şekilde anlatmaya gerek duymuyorum.
    Kullanıcıdan gelen e posta adresleri
    djdskdl.com x
    kdsl@.com x
    hdsd@ffee.net +


Asıl anlatmak istediğime gelince;
Düzenli ifadeler sadece doğrulama yapmaya yaramaz. Bunu yanında belli bir yazı içerisinden belirlediğimiz özelliklere uyan bölümleri çıkarmamıza da yarar.

Örnek :
DEĞİŞEN TEK ŞEY TEKNOLOJİ”Oliva, ‘Facebook (http://www.facebook.com) olarak neden paylaşıyoruz?’ sorusuna cevap olarak, ‘İnsan sosyal bir hayvan(http://www.hayvanlar-alemi.com). Bu yeni bir şey değil. Facebook bilinmeyen bir şey keşfetmedi. Biz insanların sevdiği, onların umursadığı şeylerle aralarında bağlar kuruyoruz’ ifadesini kullandı.
Değişen tek bir şey var, o da teknoloji’ diyen Oliva, ‘Teknoloji çok hızlı değişiyor ama biz o kadar hızlı değişmiyoruz. Telefon icat edildiği zaman, Graham Bell(http://www.buyuk-insan.com) icadının insanların etrafına toplanacağı ve dünyanın başka köşelerinden gelen mesajları dinleyecekleri bir yayın cihazı olacağını düşündü. Televizyon benzer bir evrim gösterdi. Ancak internet(http://www.w3.org) aynı değil’ dedi.
Bu yazının içerisindeki internet adreslerini bulmak istiyorsak :
http:\/\/www\.(.*?)\.[a-zA-Z]{3} ifadesi yeterli olacaktır.
Bu ifadenin söylemek istediği ; “http://www.” ile başlasın , sonrasında her türlü karakter gelsin “ (.*?) “ , ardından bir tane “.” ve son olarak 3 karakterden oluşan bir string gelsin. (“/” ve “.” karakterlerinden önce mutlaka “\”(escape quote) kullanmalıyız). Önümüzdeki günlerde düzenli ifadelerin php içerisinde nasıl kullanıldığını anlatmaya çalışacağım. İyi günler.. 

1 yorum: