Regex Ustası: Belirli Bir Alt Dize ile Başlayıp Başka Bir Alt Dize ile Bitmeyen Bir Dizeyi Nasıl Eşleştirirsiniz

Regex (düzenli ifadeler), metin işlemede ve desen eşlemede son derece güçlü araçlardır. İster deneyimli bir geliştirici olun ister yeni başlıyor olun, regex’in yeteneklerini nasıl kullanacağınızı anlamak size çok zaman ve çaba kazandırabilir. Bu makalede, belirli bir sorun üzerine yoğunlaşacağız: belirli bir alt dize ile başlayan ve başka bir alt dize ile bitmeyen bir dizenin eşleştirilmesini sağlayan bir regex deseni oluşturmak.

Sorun

Uygulamanızdaki dizeleri doğrulamak istediğinizi varsayalım. Şunları sağlamanız gerekiyor:

  • Dize, belirli bir alt dize ile başlamalı, örneğin "foo".
  • Dize, başka bir alt dize ile bitmemelidir, örneğin "bar".

Örneğin, geçerli eşleşmeler şunları içerebilir:

  • foo123
  • foolish
  • foo

Geçersiz eşleşmeler ise şöyle görünecektir:

  • foobar
  • foo bar

Bu durum karmaşık olabilir, özellikle Java veya benzeri regex sözdizimine uyan başka bir programlama dilinde regex kullanıyorsanız.

Çözüm

Bunu başarmak için regex’te negatif bakmaz (negative lookbehind) ifadeleri kullanabiliriz. Bakmazlar, belirli bir öğenin (bu durumda, dizeden son) belirlenmiş alt dizenin ardından gelmediğini belirtmemize olanak tanır.

Regex Desenini Oluşturma

Belirli senaryomuz için regex desenimizi şu şekilde tanımlayabiliriz:

foo.*(?<!bar)$

Desenin Analizi

  • foo: Desen, “foo” harflerinin olduğu yerle başlar.
  • .*: Nokta . her karakteri (satır sonu karakteri hariç) eşleştirir ve yıldız * o karakterin sıfır veya daha fazla tekrarını ifade eder.
  • (?<!bar): Bu, negatif bakmaz ifadesidir. Dizenin “bar” ile bitmediğini kontrol eder.
  • $: Bu, dize veya satırın sonuna geldiğimizi ifade eder.

Unutulmaması Gereken Ana Noktalar

  • Negatif Bakmaz: Bu regex özelliği, dize sonunda bulunmayan durumlara dayalı koşulları yapılandırmanıza olanak tanır.
  • Taşınabilirlik: Verilen regex deseni, Java’da etkili bir şekilde çalışır ve C# dilinde de çalıştığı doğrulanmıştır.

Java’da Örnek Kullanım

Bu regex’i bir Java programında şu şekilde kullanabilirsiniz:

import java.util.regex.*;

public class RegexExample {
    public static void main(String[] args) {
        String regex = "foo.*(?<!bar)$";
        String[] testStrings = { "foobar", "foo123", "foolish", "foo bar" };

        for (String testString : testStrings) {
            if (Pattern.matches(regex, testString)) {
                System.out.println(testString + " eşleşiyor.");
            } else {
                System.out.println(testString + " eşleşmiyor.");
            }
        }
    }
}

Sonuç

Belirli koşullara göre dizeleri eşleştirmek için regex’i nasıl manipüle edeceğinizi anlamak, uygulamalarınızda daha etkili doğrulamalar uygulamanızı sağlar. Negatif bakmaz kullanarak, dizelerinizin istenen kriterleri karşılamasını sağlayabilirsiniz, gereksiz sonlarla engellenmeden.

Regex bilgilerinizi kodlama uygulamalarınızı güçlendirmek için kullanarak, yazılım geliştirme yolculuğunuzda birçok karmaşık problem çözme görevini basitleştireceksiniz.