Düzenli Ýfadeler(Regular Expressions) Nedir?

Regular expression bir metni düzenlemek yada metin içerisinden belli kurallara uyan alt metinler elde etmek için kullandýðýmýz bir dildir. Bir regular expression, string tipindeki karakter topluluðuna uygulanýr. Sonuç olarak substringler oluþur yada orjinal metnin bir kýsmýný içeren deðiþtirilmiþ yeni metinler elde edilir.

Regular Expression’larda Kullanýlan Özel Karakterler ve Etkileri

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]))”

Basit Bir Test Programý Yazalým

Þimdi elde ettiðimiz tarih desenini test edebileceðimiz basit bir konsol programý yazalým. Ek bilgi olarak “?” þeklindeki bir ifadeyi desenin önüne ilave ederseniz, bir desen grubu ifade etmiþ olursunuz ve birkaç deseni ayný anda kontrol edebilirsiniz.

 

using System;

using System.Text.RegularExpressions;

class Test

{

      public static void Main()

      {

            // Regular Expression için bir desen (pattern) tanýmlýyoruz :

            string tarihDeseni=@"(?((0?[1-9])|([12][0-9])|(3[01]))(/)(0?[1-9]|1[0-2])(/)([12][0-9][0-9][0-9]))";

            // Regular Expression'umuzu tanýmlýyoruz :

            Regex benimRegex=new Regex(tarihDeseni);

            // Kullanýcýdan tarih içeren metni talep ediyoruz :

            Console.WriteLine("Lütfen içinde tarih olan bir metin giriniz :");

            // Tarih arayacaðýmýz metni konsoldan alýyoruz :

            string metin=Console.ReadLine();

            // Metin içerisindeki tarihleri (birden fazla olabilir) Collection nesnesine atýyoruz :

            MatchCollection benimMatchCollection=benimRegex.Matches(metin);

            // Metin içindeki herbir tarihi ekrana yazdýrýyoruz :

            foreach(Match benimMatch in benimMatchCollection)

            {

                  Console.WriteLine(benimMatch.Groups["tarih"]);

            }

            Console.Read();

      }

}