Düzenli İfadeler (Regular Expressions – Regex) Nedir?
Regex Nedir?
Bilgisayarcılıkta düzenlemeli ifadeler, ele alınan metindeki kimi katarların kısa yoldan ve esnek bir biçimde belirlenmesini sağlar. Bu katarlar belli karakterler, kelimeler veya karakter örüntüleri olabilir. Düzenlemeli ifadeler, bir biçimsel dil kullanarak yazılır ve bir düzenlemeli ifade işleyici tarafından yorumlanır. Bir düzenlemeli ifade işleyici, ya ayrıştırıcı üreteci olarak hizmet eden ya da metni inceleyip verilen tarife uygun kısımlarını belirleyen bir programdır.
Aşağıda bir düzenlemeli ifade ile ifade edilebilecek tariflere birkaç örnek görülebilir:
- herhangi bir yerde bulunan “ara” karakter dizisi; “ara”, “araba”, “paravan” gibi
- diğer karakterlerden yalıtılmış şekilde bulunan “ara” kelimesi
- kendisinden önce “kısa” veya “uzun” kelimesi geçen “ara” kelimesi
- bir veya daha fazla rakamdan sonra gelen “TL” karakter dizisi
Düzenlemeli ifadeler hemen hemen tüm programlama dillerinde kütüphaneler olarak mevcuttur. Ancak bunlar her biçimsel dili ayırmak için yeterli değildir, bkz. Biçimsel dil kuramı. Pek cok programlama dili ve/veya programlama dilinde, bu işlem ayrıştırıcı jeneratör yardımı ile otomatik üretilen bir programla yapılabilir.
Birçok yazılımcı regex in ne olduğunu bilsede kimse tutupda regex şablonu yazmamaktadır. Zaten internet üzerinden hazır birçok regex şablonu bulunmaktadır. Ama gelin görünki bazen kendimize has regex şablonu yazmamız gerekebilir. Bunun için regex de kullanılan bazı özel karakterleri bilip buna göre kendimiz için uyarlamamız gerekmektedir. Bilmemiz gereken bazı özel karakterler şunlardır ;
1.) “.” Karakteri
Tek bir karakteri temsil eder(yeni satır karakteri hariç).
“CSharp.edir” şeklindeki bir desen CSharpnedir, CSharpNedir, CSharpSedir, CSharp3edir gibi stringleri döndürebilir.
2.) “[]” Karakterleri
Bir arrayi yada aralığı temsil eder.
“CSharp[SNY]edir” deseni, CSharpSedir, CSharpNedir ve CSharpYedir stringlerini döndürür.
“CSharp[a-z]edir” şeklindeki kullanım aralık belirtmeye yarar.
“CSharp[0-9]edir” şeklindeki kılanlım ise sayısal aralık belirtmeye yarar.
3.) “?” Karakteri
Kendinden önceki karakterin stringte olması yada olmamasını sağlar.
“CSharpn?edir” deseni CSharpedir yada CSharpnedir döndürür.
4.) “\” Karakteri
Kendinden sonraki özel karakterin stringe dahil edilmesini sağlar.
“CSharpnedir\?” deseni CSharpnedir? Stringini döndürür. (Eğer “\” karakterini kullanmamış olsaydık CSharpnedi yada CSharpnedir dönerdi.)
5.) “*” Karakteri
Kendinden önceki karakterin yada stringin hiç olmaması yada istediği sayıda olmasını sağlar.
“CSharpnedir*” deseni, CSharpnedi, CSharpnedir, CSharpnedirr, CSharpnedirrr, … döndürür. “CSharp(nedir)*” deseni ise CSharp, CSharpnedir, CSharpnedirnedir, … döndürür.
6.) “{}” Karakterleri
Kendinden önce gelen karakterin belirtilen sayıda tekrar etmesini sağlar.
“C{4}Sharpnedir” deseni, CCCCSharpnedir stringini döndürür.
7.) “^” Karakteri
Satır başını ifade eder.
“^CSharpnedir” deseni, satır başında “CSharpnedir” stringi varsa bunu döndürür.
8.) “$” Karakteri
Satır sonunu ifade eder.
“CSharpnedir$” deseni, satır sonunda “CSharpnedir” stringi varsa bunu döndürür.
9.) “+” Karakteri
Sonsuz sayıda olabilir demektedir.
“A?+” örneğin baş harfi A olan herhangi bir kelime arıyorsak bunu kullanırız.
Basit Bir Tarih Deseni Yapalım
Şimdi işin pratiğine gelelim ve adım adım tarih deseni oluşturalım. Daha sonra ise oluşturduğumuz bu tarih desenini bir konsol programında kullanalım.
Tarih desenimiz bir string içerisindeki, GG/AA/YYYY formatlarındaki tarihleri yakalayacak yapıda olsun.
Önce desenimizin GG yani tarihin gün belirtilen kısmını tanımlayalım :
“(0?[1-9])”
// 1, 2, .., 9, 01, 02, …, 09 gibi yazılmış günleri tanımlar.
“([12][0-9])”
// 10, 11, …, 29 gibi yazılmış günleri tanımlar.
“(3[01])”
// 30, 31 günlerini tanımlar.
// Bu üç tanımı OR (|) işlemiyle
// birleştirirsek gün tanımını elde ederiz.
// Gün tanımı :
“((0?[1-9])|([12][0-9])|(3[01]))”
Şimdi desenimizin AA yani tarihin ay belirtilen kısmını tanımlayalım :
“(0?[1-9])”
// 1, 2, .., 9, 01, 02, .., 09 gibi yazılmış ayları tanımlar.
“(1[0-2])”
// 10, 11, 12 aylarını tanımlar.
// Bu iki tanımı OR işlemiyle
// birleştirirsek ay tanımını elde ederiz.
// Ay Tanımı :
“((0?[1-9])|(1[0-2]))”
Şimdi desenimizin YYYY yani tarihin yıl belirtilen kısmını tanımlayalım :
“([12][0-9][0-9][0-9])”
//1000 ile 2999 yılları arasındaki tüm yılları içerir.
Ve son olarak tanımladığımız gün, ay ve yıl desenlerini “/” ile birleştirelim :
“((0?[1-9])|([12][0-9])|(3[01]))(/)(0?[1-9]|1[0-2])(/)([12][0-9][0-9][0-9]))”
Kaynaklar :
1 Yorum bulunmaktadır - “Düzenli İfadeler (Regular Expressions – Regex) Nedir?”
Yorum Yapın
Etiketler
Son Yazılar
- Uzak sunucuda bulunan android cihaz ile otomasyon
- Mac’ de çoklu Java versiyon yönetimi
- İş yarar docker komutları
- Eski branchlerin git’ den silinmesi
- Kubernetes Süresi Dolmuş Sertifikaları Yenilemek
Son Yorumlar
- Hosting koşuşturması için
- Garanti Sanal Pos Kurulumu, Sorunlar ve Çözümler için
- Visual Studio Toolbox’a component(bileşen) eklenmesi için
- “File is too large for destination file system” hatasını gidermek için
- Php’de UTF-8 Türkçe karakter sorunu ve çözümü için
Bağlantılar
Arşivler
- Kasım 2021
- Eylül 2021
- Ağustos 2021
- Temmuz 2021
- Aralık 2020
- Kasım 2020
- Ekim 2020
- Eylül 2020
- Kasım 2017
- Mayıs 2017
- Mart 2017
- Şubat 2017
- Ocak 2017
- Nisan 2015
- Aralık 2014
- Mayıs 2014
- Eylül 2013
- Haziran 2013
- Şubat 2013
- Kasım 2012
- Ekim 2012
- Eylül 2012
- Mart 2012
- Şubat 2012
- Ocak 2012
- Aralık 2011
- Kasım 2011
- Ekim 2011
- Eylül 2011
- Temmuz 2011
- Haziran 2011
- Mayıs 2011
- Mart 2011
- Ocak 2011
- Aralık 2010
- Kasım 2010
- Ekim 2010
- Eylül 2010
- Ağustos 2010
- Temmuz 2010
- Haziran 2010
- Mayıs 2010
- Nisan 2010
- Mart 2010
- Şubat 2010
- Ocak 2010
- Haziran 2009
- Mayıs 2009
- Nisan 2009
- Mart 2009
[…] ifadeler (regular expressions – kısaltması:regex) çıkmıştır. Enes Pekkaya blogundaki yazıda şöyle bahsetmiş; Düzenlemeli ifadeler, ele alınan metindeki kimi katarların kısa yoldan ve […]