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.