Regex(Regular Expression) yani düzenli ifadeler, metinlerde aranan bir tümceyi kolayca bulmamızı sağlayan bir çeşit algoritmadır. Yani uzun tümcelerde bulmayı istediğimiz tümceciği kullanacağımız desenlerle bulmamızı sağlar. Regular Expression’a programlama dünyasında başvurmamızın sebebi, düşündüğümüz işlemi kısa sürede kod kalabalığı olmadan yapabilmek içindir. Özellikle log işi ile uğraşanlar parse edeceği değerlere ulaşmak için bu ifadeleri kullanmak zorundadır. Biraz sonra yapacağımız örneklerle, sonraki projelerinizde kullanabileceğiniz regex desenlerini kafanızda canlandırabilirsiniz. Şimdi ise örneklerimizle bu konuyu anlamaya çalışalım.
1. [abc] = a,b ya da c harfi varsa, bunları getirir.
Üstteki örneği incelediğimizde regex deseninin metnin tümünden sonuçlar bulduğunu görüyoruz. Bunları array formatında tuttuğumuzu farz edersek;
array[0] = b
array[1] = c
şeklinde devam edecektir.
2. [^abc] = Bu karakter dışındakileri getirir
Üstteki regex örneğini incelediğimizde ise, a, b ya da c karakteri dışındaki tüm karakterleri aldığını görüyoruz. Yine ilk örnekteki gibi array yapısında bu verileri sakladığımızı düşünürsek, 0. indis B sonucunu, 1. indis u sonucunu verecektir.
3. [a-z] = a-z karakterleri dahil bunların arasındaki tüm karakterleri seçer
Üstteki regex örneğine baktığımızda ise a ile z karakterleri dahil bunların arasındaki tüm karakterleri kapsayarak arama yapıp sonucunu döndürdüğünü görüyoruz. Burada dikkat etmemiz gereken nokta, küçük harfler ile desenimizi belirlediğimiz için büyük harfler kapsam dışında yer almıştır. Ayrıca sayıları da doğal olarak almamıştır. Bunlara ek olarak türkçe karakterleri de almadığını görüyoruz. Şimdi ise biraz bu operatörlerden uzaklaşarak flagları inceleyelim. Flag ya da options dediğimiz bu yapı, regex desenlerimizin ayarı anlamına gelmektedir. Aşağıdaki resim, her programlama dili için birbirine benzese de farklılıklar da oldukça mevcuttur. Bu yüzden kullandığınız platformun regex kütüphanesinin options yani flaglarını inceleyiniz.
global = kullanılmadığında sadece ilk bulunan sonucu döndürür. Diğer değerleri asla döndürmez. Bu Flag ı kullanmazsak biraz önceki anlattığımız örneklerdeki array yapısını kullanmamıza gerek yoktur. Çünkü sadece sıfırıncı indisin bir değeri olacaktır. Aşağıdaki resimde bunun örneğini görebilirsiniz.
unicode = Türkçe karakter sıkıntısını çözmemize yardımcı olur. Ç, Ş, Ğ gibi karakterleri desenimiz yazmasak bile otomatik olarak tanıyacaktır. Önemli bir flagdır. Bu arada bu flagı SADECE biraz sonra göreceğimiz \w deseni ile kullanabiliriz.
4. Desenimiz : .(yani nokta) = Bütün karakterleri işaret eder.
Üstteki örneği incelediğimizde, tüm karakterleri ayrı ayrı seçtiğini görmekteyiz. Nokta(.) karakteri bize tüm karakterleri işaret etmektedir. Nokta kullandığımız vakit, tüm karakterleri seçebilir anlamı çıkmaktadır.
5. Desenimiz : \s = Boşluk ya da tab karakterini işaret eder. Space kelimesinin baş harfinden aklımıza bu desen gelebilir. Şimdi aşağıdaki örneğimizi inceleyelim.
Üstteki örnekte gördüğünüz gibi tüm boşluk karakterlerini ayrı ayrı işaretlemiştir.
6. Desenimiz : \S = Boşluk ya da tab karakteri dışındaki tüm karakterleri işaret eder. Üstteki örneğin tam tersi sonuç verir.
Örneğin tümceyi kelime kelime seçmek istediğimizde bunu kullanabiliriz. Şimdi aşağıdaki örneği inceleyerek yeni bir operatör öğrenelim.
7. Desenimiz : + = Solundaki ifadenin en az bir ya da daha fazla olduğumu durumu işaret eder. Aşağıdaki örneğe bakalım.
Üstteki örnekte, her kelimeyi ayrı ayrı seçtiğini görüyoruz. Bu durum nasıl oldu peki= \S karakteri boşluk ve tab dışındaki her karakteri işaretlemekteydi. Biz ise bunu +(artı) operatörü ile kullandığımızda, boşluk karakterini görene kadar o tümceyi seçti ve bize kelime seçme şansını oluşturmuş oldu.
8. Desenimiz : \d = Aslında tahmin edebilirsiniz. d harfinin anlamı digit demektir. Yani sayı. Bu operatörü kullandığımızda sayı karakterini seçmiş oluruz. Şimdi örneği inceleyelim.
Üstteki örnekte her sayı karakterini ayrı ayrı seçmiştir.
Şimdi ise artı(+) operatörü ile birlikte kullanalım.
Evet örneğimize baktığımızda, sayı tümcelerini ayrı ayrı seçtiğinizi görüyoruz.
Bu durumun tersini yapmak istersen /D tümcesini kullanacağız. Yani /D deseni sayı haricindeki karakterleri işaret eder. Bunun örneğini yapmayacağım.
Peki, sayılara özel deseni öğrendik(/d)
9. Desenimiz : \w = Harf, sayı, ya da alt çizgi karakterlerini seçer. \W ise bunun tam tersi olayıdır.
Not : Unicode Flag, sadece bu desen de çalışmaktadır.
Üstteki örnekte +(artı) operatörünü de kullanarak her kelimeyi ayrı ayrı seçmiş olduk.
10. Desenimiz : (sa) = Parantez operatörü içinde sa geçen tümceleri işaretler. Örneğin hem sa geçen hem de al geçen tümceleri işaretlemek isteyelim. Şimdi bu örneği görerek bu deseni pekiştirmiş olalım.
Üstteki örneği incelediğinizde, biraz önce anlattığımı anlamış oldunuz.
11. Desenimiz : ? = Bu operatörün öncesindeki karakterin olması ya da olmaması durumunu işaret eder. Bunu örnekle pekiştirelim.
Üstteki örneği incelediğimizde s harfi kesin olacak ama a olsa da olur olmasa da olur anlamı çıkmaktadır.
12. Desenimiz : * = Bu operatör ise solundaki ifade olmasa da olur fakat var ise, birden fazla yan yana geliyorsa hepsini seçmesini sağlar. Bunu da örnekle daha iyi anlayabileceğiz.
Üstteki örnekte s karakteri kesin olarak olacak, a karakteri ise olmaya da bilir(olursa birden fazla yan yana ise onları da seçer), ola da bilir.
Not : + karakteri ile farkı, + karakterinde EN AZ 1 DEFA solundaki karakter olmak zorundadır.
13. Desenimiz : a{2} = Bu desen ise a karakterinden iki defa olmalı anlamına gelir.
14. Desenimiz : a{3,} = Bu desen a karakterinden üç ya da daha fazla olabileceği anlamına gelir
= Bu desen ise en az üç en fazla 5 kere a gelebilir anlamına gelir.
Üstteki örneği incelediğinizde bu operatörü çok iyi anlayabileceksiniz.
16. Desenimiz : ^ = Bu operatör ise sağında hangi karakter varsa, tümcenin o paragrafında işaret ettiği karakter ile başlaması durumuna işaret eder. Aşağıdaki örneği inceleyelim.
17. Desenimiz : $ = Bu operatörün solunda hangi karakter varsa, tümcenin o paragrafında işaret karakter ile bitmesi durumuna işaret eder.
18. Desenimiz : \b = Bu operatör ise tümcenin, solundaki ifade ile bitmesine işaret eder. Aşağıdaki örneği inceleyelim
Evet arkadaşlar, örneklerle konuyu anlatmaya çalıştım. Fakat bu yazıyı okuduysanız size önerim kesinlikle örnekler yapın. Ancak bu şekilde aklınızda kalabilir. Bana göre çok önemli bir konu. Çünkü java olsun başka bir dil olsun, her zaman kullanacağımız bir yapı. Bu konudan kaçarak bu tür işlere girdiğimizde satırlar dolusu kod yazmamız gerekir. Bu yüzden bu konuyu iyi öğrenin. Bol bol örnekler yapın. Size flaglardan bahsettim. Bunlar PHP de farklıdır Java da farklıdır. Yani dillere göre değişebilir. Çalıştığınız platform için regex flaglarına muhakkak bakın. Takıldığınız noktalar da hatanız bu flaglardan kaynaklı olabilir. Her dilin default yani varsayılan flagları mevcuttur. Bu flag ayarlarına göz atınız. Eğer sizlere yardımcı olabildiysem ne mutlu bana! Bir şey sormak isterseniz çekinmeyin. Elimden geldiğinde yardımcı olmaya çalışırım. Okuduğunuz için teşekkürler