Bölüm 1: Regex Nedir ve Neden Gereklidir?
Veri dünyasında çalışıyorsanız, er ya da geç devasa metin yığınları içinde kaybolduğunuz o an gelir. İşte Regex (Regular Expressions), yani Düzenli İfadeler, bu karmaşanın içindeki gizli kalıpları bulan bir "arama sanatı"dır. En basit tanımıyla Regex; belirli bir metin dizisini tanımlamak, eşleştirmek ve yönetmek için kullanılan standartlaştırılmış bir karakter dizisidir.
Pek çok kişi "Neden Ctrl+F yapıp geçmiyoruz?" diye düşünebilir. Ancak klasik arama yöntemleri sadece tam eşleşmeleri bulur. Örneğin, bir metinde "THYAO" kelimesini aratabilirsiniz. Peki ya binlerce satırın içinde kaç tane 5 harfli, büyük harfle yazılmış hisse kodu olduğunu bulmanız gerekirse? Ya da formatı sürekli değişen telefon numaralarını ayıklamanız gerekirse? Klasik "Bul" komutu burada çaresiz kalırken, Regex size "X kuralına uyan tüm metinleri getir" deme gücü verir.
Örneğin; sunucu loglarını incelediğinizi hayal edin. Karşınızda binlerce satırlık, içinde IP adresleri, tarihler ve hata mesajları olan bir metin var:
\d{4}-\d{2}-\d{2} gibi basit bir desen kullanarak saniyeler içinde tüm tarih verilerini süzebilir, sadece "ERROR" ile biten satırları ayıklayıp raporlayabilirsiniz. Regex, samanlıktaki iğneyi aramak yerine, samanlığa bir mıknatıs tutmaktır.Bölüm 2: Temel Yapı Taşları (Meta Karakterler)
Regex dünyasına ilk adımınızı attığınızda, karşınıza alfabenin dışından gelen bazı özel karakterler çıkar. Bunlara "Meta Karakterler" diyoruz. Bu karakterler kendi anlamlarını yitirip, birer komuta dönüşürler. İşte en sık kullanacağınız üç temel yapı taşı:
2.1. Nokta (.): Her Şeyin Yerini Tutan Joker
Nokta karakteri, Regex'in "joker" karakteridir. Yeni satır karakteri hariç, herhangi bir tek karakterin (harf, rakam, sembol, boşluk) yerini tutar.
Örnek: s.n deseni; "son", "sin", "sun" hatta "s n" (boşluklu) ifadelerinin hepsini yakalar.
2.2. Çapalar (^ ve $): Sınırları Belirlemek
Çapalar, metnin içeriğiyle değil, metnin neresinde olduğunuzla ilgilenir.
^BİST yazarsanız, sadece satırın en başında "BİST" ile başlayan cümleleri bulur; cümlenin ortasındakileri görmezden gelir.son$ deseni, sadece "son" kelimesiyle biten satırları yakalar.2.3. Karakter Grupları ([]): Seçici Geçirgenlik
Köşeli parantezler, "Burada sadece şu karakterlerden biri olabilir" demenizi sağlar. Aralığı belirtmek için araya tire (-) koyarız.
[a-z]: Herhangi bir küçük harf.[0-9]: Herhangi bir rakam.[aeiou]: Sadece sesli harfler.Örnek: [B-L]IST deseni; "BIST", "KIST", "LIST" gibi ifadeleri yakalar ama "bist" (küçük harf) ifadesini yakalamaz.
[0-9] yazmanın biraz uzun olduğunu fark etmişsinizdir. Regex yazanlar işlerini hızlandırmak için bazı sık kullanılan gruplara kısayollar atamışlardır:\d (Digit): Herhangi bir rakamı temsil eder. [0-9] ifadesinin kısa halidir.\w (Word): Herhangi bir harf, rakam veya alt çizgi (_) karakterini temsil eder. [a-zA-Z0-9_] ifadesinin kısa halidir.\s (Space): Boşluk, tab veya yeni satır gibi "beyaz boşluk" (whitespace) karakterlerini yakalar.Bölüm 3: Niceleyiciler (Quantifiers): "Kaç Tane?"
Niceleyiciler, kendisinden hemen önce gelen karakterin kaç kez tekrarlanması gerektiğini söyler. Eğer meta karakterler Regex’in harfleriyse, niceleyiciler de onun miktarlarıdır.
| Sembol | Anlamı | Açıklama | Örnek |
|---|---|---|---|
* | Yıldız | 0 veya daha fazla (Belki hiç, belki çok) eşleşme arar. | selam* (sela, selam, selammm yakalar) |
+ | Artı | 1 veya daha fazla (En az bir tane) olmasını şart koşar. | hey+ (hey, heyy yakalar; "he" yakalamaz) |
? | Soru İşareti | 0 veya 1 kez tekrarlanır. Karakteri opsiyonel yapar. | HTTP[S]? (Hem HTTP hem HTTPS yakalar) |
{n,m} | Süslü Parantez | Belirtilen miktarda tam kontrol sağlar ({n}, {n,}, {n,m}). | \d{4} (Tam olarak 4 rakam arar) |
Gerçek Hayat Senaryosu: Telefon Numarası Yakalama
Diyelim ki bir metindeki telefon numaralarını (örneğin: 0212 111 22 33 veya 0555 555 55 55 formatında) yakalamak istiyorsunuz:
\d{4} \d{3} \d{2} \d{2}Mantık: Burada \d rakamı temsil eder. Desenimiz; "4 rakam, bir boşluk, 3 rakam, bir boşluk, 2 rakam, bir boşluk ve 2 rakam" düzenini hassasça yakalar.
Bölüm 4: En Sık Yapılan Hatalar ve Püf Noktaları
Regex öğrenirken her şey kağıt üzerinde kolay görünse de, uygulamaya geçtiğinizde sizi bekleyen birkaç "tuzak" vardır. İşte o hatalardan kaçınmanızı sağlayacak püf noktaları:
1. "Açgözlü" (Greedy) vs. "Tembel" (Lazy) Eşleşme
Regex varsayılan olarak "açgözlüdür". Yani bulabildiği en uzun eşleşmeyi yakalamaya çalışır. Bu da bazen istemediğimiz kadar çok veriyi seçmemize neden olur.
Senaryo: HTML etiketlerini ayıklamak istiyorsunuz. Metnimiz: <div>Sabri</div> <div>Güneş</div>
<.*>): İlk < karakterinden başlar ve en sondaki > karakterine kadar her şeyi tek bir parça olarak yakalar.
Sonuç: <div>Sabri</div> <div>Güneş</div> (Hepsini tek seferde yutar).<.*?>): Soru işareti (?) burada "ilk gördüğün durakta dur" der.
Sonuç: <div> ve </div> ifadelerini ayrı ayrı temizce yakalar.Püf Noktası: Eğer Regex'iniz beklediğinizden daha büyük bir alanı kapsıyorsa, niceleyicinin sonuna bir ? ekleyerek onu sakinleştirin (tembelleştirin).
2. Kaçış Karakterini (\) Unutmak
Bölüm 2'de noktanın (.) "her şeyin yerini tutan joker" olduğunu öğrenmiştik. Peki ya biz gerçekten metnin içindeki yalın bir noktayı aramak istiyorsak?
Hata: google.com aratmak için direkt desene google.com yazarsanız, Regex aradaki noktayı joker sanır ve google1com, googleXcom gibi ifadeleri de yakalar.
\) kullanırız.
Doğru Kullanım: google\.comUnutmayın; *, +, ?, (, [ gibi tüm özel karakterleri metin içinde düz bir karakter olarak ararken başına mutlaka \ koymalısınız.
Bölüm 5: Kapanış ve Araç Tavsiyeleri
Regex dünyasına ilk baktığınızda gördüğünüz o karmaşık karakter yığınları sizi korkutmasın. Unutmayın ki Regex öğrenmek bir "ezber" süreci değil, bir "mantık" geliştirme işidir. Tıpkı bir yabancı dil öğrenir gibi, önce harfleri (meta karakterler), sonra kelimeleri (kısayollar) ve en sonunda cümleleri (desenler) kurmayı öğreniyorsunuz. Bu dili bir kez kavradığınızda, veri temizleme ve arama süreçlerinizdeki hız artışına siz bile inanmayacaksınız.
İşinizi Kolaylaştıracak Araçlar
Kendi desenlerinizi yazarken her şeyi zihninizden yapmaya çalışmak yerine, interaktif araçlardan destek almak en doğru yoldur: