Giriş Seviyesi Regex

Samet Yıldıran
Jul 25, 2017 · 3 min read

Uzun zamandır ihtiyaçlarımın basitliğinden ve kolaya kaçmamdan ötürü regexe bulaşmamıştım. Hep ertelemiş, işlerimi basitçe string find replace gibi işlemlerle halletmiştim.

Yakın zamanda daha karmaşık ihtiyacımdan ötürü artık kaçamadım ve regexe bulaştım. Regex ilk başta karışık gibi gelebiliyor. Ben de ilk başta anlamayı kolaylaştırmak için bu yazıyı yazıyorum.

Regexin kullanımı kısaca, bir metinden istediğin şartlara uyan bilgileri bulmamıza yarar. Bu şartları belirtebilmek için ise regexin bazı kuralları vardır. Kısaca bunlar;

Karakter Açıklaması d Herhangi bir rakamı ifade eder . Satır başı hariç herhangi bir karakteri ifade eder w Herhangi bir harfi, rakamı veya alt tireyi ifade eder s Herhangi bir görünmez karakteri ve boşluğu ifade eder. (Boşluk, tab, satır başı gibi) ^ Başlangıcı ifade eder $ Sonu ifade eder * Kendinden önce yazılmış karakterin;
sıfır veya daha fazla tekrar etmesini ifade eder + Kendinden önce yazılmış karakterin;
bir veya daha fazla tekrar etmesini ifade eder ? Kendinden önce yazılmış karakterin;
olsa da olur olmasa da olurunu ifade eder {123} Kendinden önce yazılmış karakterin;
parantez içerisine yazılan sayı kadar tekrar etmesini ifade eder {1, 2} Kendinden önce yazılmış karakterin;
parantez içerisinde yazılan iki sayı arasında tekrar etmesini ifade eder ( … ) Parantez içerisine yazılan ifadeleri gruplamaya yarar ( … | … ) Parantez içerisine yazılan “|” dik tire işareti ya da anlamına gelir, içerisine yazılan ve dik tire ile ayrılan ifadelerden herhangi birisinin eşleşmesini ifade eder [ … ] Köşeli parantez içerisine yazılan karakterlerden bir tanesini ifade eder \ Kaçış karakteri. Yukarıda yazdığımız karakterleri normal olarak yazmak istediğimizde başına kaçış işaretini koyarız. Örneğin noktayı ifade etmek için . D Rakam olmayan herhangi bir karakteri ifade eder S Görünmez ve boşluk olmayan karakteri ifade eder W Harf, rakam veya alt tire olmayan karakteri ifade eder b Kelimenin başını veya sonunu ifade eder [^ … ] Üç nokta yerine yazılan karakterler haricindeki karakterleri ifade eder [a-z] A dan z’ye olan harflerden birisini ifade eder

Kaynak

Bir kaç örnekle, bu kuralları ihtiyacımız doğrultusunda nasıl kullanabiliriz göstereceğim.

En basit örnek:

/amet/ Böyle bir regex kuralı birebir yazıma uyan tüm örnekleri bulur. Kendi başına bir kelime olsun yada içinde geçsin ayrım yapmadan hepsini alır. (Samet kelimesinde amet alır)

/\w{5}/ Bu kural ise her 5 karakteri döndürür. DENEMEYAZDIM örneğinde ayrı ayrı DENEM EYAZD sonuçlarını verir. DENEME YAZDIM da ise DENEM YAZDI sonuçlarını verir. Boşluğu görünce sıfırladı çünkü kuralımızda boşluğu kapsayan bir ifade yok.

Sık kullanılan [] kuralı ise, parantezler arasına yazılan kurallar topluluğunu ifade etmektedir. Bir karakter parantezler arasındaki herhangi bir kurala uyabilir anlamında kullanılıp {5} * gibi kurallarla da kapsamı genişletilebilir.

/sit [\w]* / Bu kural ise sit kelimesinden sonra boşluk olacak sonrasında w kuralı işleyecek ve bir boşluk daha olacak. Örnek linkteki gibi sadece bir uyuşma buluştu. Ama kuraldaki boşluğu silsek 3 eşleşme daha bulacak. Diğer bulduklarına dikkat ederseniz boşluk değil virgül yada nokta var. Haliyle nokta ve virgülü görünce eşleşme durdu ve getirdi bize.

/[\w]{5}\./ Bu kural ise tüm noktalardan önceki ilk beş karakteri alır. Yukarıdaki tabloyu incelersek, {5} uzunluk bildirimidir. Dikkat ederseniz nokta karakteri özel anlam ifade ettiği için asıl anlamında iş görsün diye \ kaçış karakterini kullanıyoruz.

/[\w]*\./ Bu kural ise tüm noktalardan önceki kelimeleri alıyoruz. Bu sefer uzunluk yerine * (gidebildiği yere kadar) kullanarak verdiğimiz kural uyana kadar kısmı alıyor. Haliyle harflerden hariç bir karakterle karşılaşana kadar kısmı bize getiriyor. Boşluk, nokta, tırnak ve virgül gibi karakterle karşılaşınca bize sonucu döndürecektir. Tırnak da kelimeye dahil bir karakter olacağından bu kuralımızı geliştirmemiz gerekebilir (yerine ve ihtiyacına göre \w kuralının yanına diğer isteklerimize uyan kuralları eklememiz gerekir).

Bu örnekler giriş seviyesi için fikir vereceğine inanıyorum. Bu fikirlerinizi sınamak RegExr sitesini öneririm.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade