Regular expression desenleri tanımlamada kullanılan özel karakterleri örnekleri ile anlatırsak sanırım regular expressionlar daha tanıdı ve kolay gelebilir.
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.
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]))”
Kaynak: csharpnedir