C# dilinde Regex ve Match Sınıfları

Eyl 06, 2013

Düzenli ifadeler (Regular Expressions) .Net Framework’ un önemli bir kısmını teşkil eder. Bir metin içerisinde belli bir kelime aranmak istenirse, bunun için Karakter Katarı (String) metotları kullanılabilir. Fakat arama işleminin bir kalıp üzerinden yapılması gerekiyorsa Düzenli İfadeler kullanılmalıdır. Düzenli İfadeler için kullanılacabilecek iki önemli sınıf vardır. Bunlar Regex ve Match sınıflarıdır.

Regex sınıfı belli bir kalıbı parametre olarak alır ve bu kalıbı kullanarak metin üzerinde işlemler yapar. Match sınıfı ise bir kalıbın metinle eşleşmesi ile ilgili bilgileri tutup bu bilgiler üzerinde işlem yapar. Regex sınıfının belli başlı metodları şunlardır:

Escape: Meta karakterleri metin içerisinden çıkarır.
IsMatch: Katarın kalıpla eşleşip eşleşmediğini verir.
Match: Katar ve kalıbın eşleşmesini saklar.
Matches: Bir metin içerisinde  kalıpla eşleşen bütün katarları saklar.
Replace: Kalıpla eşleşen metini parametre olarak girilen katarla değiştirir.
Split: Kalıpla eşleşen ifadeyi önceden belirtilen pozisyondan parçalara böler.
ToString: Kalıbı metin olarak döndürür.
Unescape: Meta karakterleri metin içerisine geri koyar.

Match sınıfının bir sonraki eşleşmeyi veren NextMatch metodu dışında çok önemli bir metodu yoktur. Daha ziyade özellikleri (Properties) önemlidir.

Empty: Boş bir grup oluşturur. Bütün başarısız karşılaştırmalar boş olarak döner.
Index: Kalıpla eşleşen katarın  metin içerisindeki pozisyonunu verir.
Length: Kalıpla eşleşen katarın boyutunu verir.
Success: Karşılaştırmanın başarılı olup olmadığını belirtir.
Value: Karşılıştırılan kalıba uyan katarı alır.

Bu konu ile ilgili örnek bir uygulama aşağıda verilmiştir. Bu uygulama İTÜ standartlarına uygun bir şifre girilip girilmediğini kontrol etmektedir.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace Regex_Uyg
{
    class Program
    {
        static void Main(string[] args)
        {
            int counter = 0;
            Regex pass = new Regex(@"^[^ şçğüöı]{10,16}$");
            Console.WriteLine("Please enter a new password: ");
            string password = Console.ReadLine();
            Regex sLetter = new Regex(@"[a-z]");
            Regex cLetter = new Regex(@"[A-Z]");
            Regex number = new Regex(@"[0-9]");
            Regex signs = new Regex(@"[\.]|[\?]|[\\]|[\*]|[\;]|[\,]|[\:]|[-_!']");

            if (pass.IsMatch(password))
            {
                if (sLetter.IsMatch(password)){ counter++; }

                if (cLetter.IsMatch(password)){ counter++; }
                if (number.IsMatch(password)) { counter++; }
                if (signs.IsMatch(password))  { counter++; }
                if (counter >= 3)
                {
                    Console.WriteLine("Your password has succesfully changed.");
                }
                else
                {
                    Console.WriteLine("Your password is not secure enough.");
                }
            }
            else
            {
                Console.WriteLine("The password you entered is not valid.");
            }
        }
    }
}