Bir metinde belli biçimleri
** seçmeye yarayan ifadelere denir, "Regexp" diye de geçer.
Bir kaç kullanım örneği vermek gerekirse:
"colou?r", hem "color" kelimesini seçer, hem de "colour" kelimesini.
Çünkü "?" karakteri, kendisinden önce gelen karakter için "olmasa da olur" anlamını taşır.
"gr[ae]y", hem "gray" kelimesini seçer, hem de "grey" kelimesini.
Çünkü köşeli parantezler içerisine verdiğiniz karakterlerden herhangi birinin tutması yeterlidir.
"[0-8][0-9] [a-zA-Z]{1,3} [0-9]{2,5}", Türkiye'ye ait bir plaka kodunu seçer.
"[0-8]", 0 ile 8 arasında bir rakamı (il sayımız 80'lerde olduğu için),
"[0-9]", 0 ile 9 arasında bir rakamı seçer.
"[a-z]", a ile z arasındaki bir
küçük harfi,
"[A-Z]" ise, A ile Z arasındaki bir
büyük harfi seçeceği için,
[a-zA-Z] de, küçük veya büyük herhangi bir
* harfi seçecektir.
"{1,3}", kendisinden önce gelen karakter veya gruptan en az 1, en fazla 3 tane olacağını belirtir.
Bu yüzden "[a-zA-Z]{1, 3}", en az 1, en fazla 3 harfin yan yana gelmesi anlamına gelir.
"[0-9]{2,5}", 0 ile 9 arasında en az 2, en fazla 5 rakamın yan yana gelmesini bekler.
Desene geri dönersek: "[0-8][0-9] [a-zA-Z]{1,3} [0-9]{2,5}"
34 ASD 4587 bu desen tarafından seçilecek ama "92 ASD 123" veya "06 DSA 3A45" seçilmeyecektir.
Çünkü "92 ASD 123"ün ilk karakteri 0 ile 8 arasında bir sayı değil,
"06 DSA 3A45"in ise, harflerden sonraki ilk -en az- iki karakteri rakam değildir.
Regexp kullanarak seçimin farklı yerlerini gruplamanız da mümkündür:
Örneğin yukarıdaki plaka deseni şu şekilde yazılabilir:
"(?<İl>[0-8][0-9]) (?<A>[a-zA-Z]{1,3}) (?<N>[0-9]{2,5})"
Bu sayede bir metinde Regexp kullanarak arama yaparsanız, her eşleşmede bu isimlerle farklı parçalar elde edebilirsiniz.
.NET Framework içindexi Regex sınıfını kullanarak bir C# örneği verirsek:
var text = "34 ABC 1234, 06 DEF 5678";
var regex = new Regex("(?<İl>[0-8][0-9]) (?<A>[a-zA-Z]{1,3}) (?<N>[0-9]{2,5})");
var match = regex.Match(text);
while (match.Success)
{
var c = match.Groups["İl"].Value;
var a = match.Groups["A"].Value;
var n = match.Groups["N"].Value;
plates.Add(new LicensePlate(int.Parse(c), a, int.Parse(n)));
match = match.NextMatch();
}
Verdiğiniz metinde bulunan bütün plaka kodlarını LicensePlate koleksiyonunuza ekleyecektir.