#regex 05 Mart 2026

Veri Dünyasının Gizli Dili: Regex (Düzenli İfadeler)

Regex (Düzenli İfadeler) dünyasına giriş. Klasik aramanın yetersiz kaldığı büyük veri yığınlarında meta karakterler, kısayollar ve niceleyiciler ile kalıpları yakalama, açgözlü/tembel eşleşme tuzakları ve interaktif araçlar.

Featured Image

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:

  • Klasik yöntemle: Her satırı tek tek okumanız veya çok karmaşık döngüler yazmanız gerekir.
  • Regex ile: \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.

    Ne zaman kullanılır? Aradaki karakterin ne olduğundan emin olmadığınız ama orada bir karakter olduğunu bildiğiniz durumlarda hayat kurtarır.

    2.2. Çapalar (^ ve $): Sınırları Belirlemek

    Çapalar, metnin içeriğiyle değil, metnin neresinde olduğunuzla ilgilenir.

    • Şapka (^): Satırın en başını işaret eder. Örneğin ^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.
    • Dolar ($): Satırın en sonunu işaret eder. 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.

        Küçük Bir Es: Regex'in Kısayolları (Shorthand Classes)
        Karakter gruplarında [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.

          SembolAnlamıAçıklamaÖrnek
          *Yıldız0 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 İşareti0 veya 1 kez tekrarlanır. Karakteri opsiyonel yapar.HTTP[S]? (Hem HTTP hem HTTPS yakalar)
          {n,m}Süslü ParantezBelirtilen 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:

          Regex Pattern
          regex
          \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>

          • Açgözlü Desen (<.*>): İ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).
          • Tembel Desen (<.*?>): 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.

            Çözüm: Meta karakterlerin özel gücünü iptal edip onları "sıradan bir karaktere" dönüştürmek için ters eğik çizgi (\) kullanırız. Doğru Kullanım: google\.com

            Unutmayı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:

            • Regex101: Bu işin tartışmasız en iyi yardımcısıdır. Yazdığınız desenin hangi karakterleri neden yakaladığını size adım adım açıklar ve sağ tarafta harika bir "kopya kağıdı" (cheat sheet) sunar.
            • Regexr: Görsel arayüzü ve topluluk tarafından paylaşılan desen kütüphanesiyle harika bir deneme tahtasıdır.
            • "Veri dünyasındaki yolculuğunuzda Regex, elinizdeki en keskin araçlardan biri olacak. Karmaşık log dosyalarını, hatalı girilmiş telefon numaralarını veya web sitelerinden kazınan ham metinleri düzene sokmak artık sizin için bir sorun olmaktan çıkacak."