Regular Expressions1(090708)
Regular Expressions2(090708)
Regular Expressions3(150708)
WPF - Ink (Çizim İşlemleri)(150708)
WPF - Styles Kullanımı(150708)
WPF - Grafik İşlemlerinde Şekillerin(Shapes) Kullanımı(210708)
WPF - Grafik İşlemlerinde Şekillerin(Shapes) Kullanımı2(210708)
WPF - Temel Animasyon İşlemleri(310708)
WPF - Temel Animasyon İşlemleri2(310708)
WPF ile Transform (Donusum) Islemleri(270808)
WPF - Uygulamalara Video Kontrolleri Eklemek(250808)
WPF - User Control(270808)
Visual C# .NET Ders Notları
Visual C# .NET Ders Notları'ndaki Örneklerin Dosyaları
Diger Site
 

Regular Expressions2(090708)

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.
Bu programın kaynak kodunu indirmek için tıklayın.



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();

      }

}



Kaynak: http://www.csharpnedir.com/makalegoster.asp?MId=129


Bugün 4 ziyaretçi (9 klik) kişi burdaydı!
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol