Bir çok programın ortak noktası text işlemektir. Kullanıcının giirmiş olduğu bir yazıyı belki doğrulamaya belki yeniden formatlamaya ihtiyacımız olabilir.Bir çok programcı text dosyası içersinden önemli verileri işlemek de isteyebilir. Bu sistemler sıksık standart olmayan kodlama teknikleri kullanır. Ek olarak programcı çıkış dosyasını giriş dosyasından farklı bir formatta kodlamak isteyebilir.
Bu bölümde regular expression ile giriş doğrulama,texti tekrardan formatlama ve veriyi seçip çıkartma işlemlerini yapacağız. Ayrıca text dosyasında farklı kodlama tekniklerini kullanmayı görecez.
Ders 1.Regular Expression Formu
Geliştiriciler text işlemeye sık sık ihtiyaç duyar. Örneğin bir kullanıcı giriş formunda kullanıcının girdiği özel karakterleri silmek yada değiştirmek isteyebilirsiniz.
Bir Regular Expression bir stringin karakterlerini belirtilen formatta olup olmadığını denetleyebilir. Text i değiştirmek veya textin belli parçasını seçip çıkartmak için regular expression kullanılır.Text üzerinde karar vermek için regular expression yaratabilir, stringin tamamen, integerdanmı, yoksa stringin içindeki karakterlerin küçük harflemi veya hexadecimal girişten mi oluştuğunu görebilirsiniz. Text içersinden html linki yada resim dosyası ismini seçip alabilirsiniz.Son olarak regular expression kullanarak text formatını değiştirebilir veya hatalı karakterleri silebilirsiniz.
Bu ders sonunda:
-Regular expression kullanarak belirtilen şablonda stringleri karşılaştırabilir
-bir text dosyasından veriyi seçi çıkarabilir.
-text verisini yeniden formatlayabilirsiniz.
Regular expression kullanarak nasıl şablon karşılaştırması yapılır?
RegularExrpression test etmek için console app oluşturuyoruz. iki string girecez, ve ilk stringi ikincisiyle karşılaştıracaz. aşağıdaki kodda gösterilmiştir. system.Text.RegularExpressions namespacei eklenmiştir.
Console.Write("regularexp giriniz:");
string regularexp = Console.ReadLine();
Console.Write("karşılaştırma için giriniz");
string input = Console.ReadLine();
if (Regex.IsMatch(input, regularexp))
Console.WriteLine("girdiğiniz değer reg exp. uygun");
else
Console.WriteLine("yanlış deger girdiniz:");
Bu kodu çalıştırıdğımızda reg exp olarak ^\d{5}$ girdiğimizde;karşılaştırma stringimiz 12345 olduğunda geçerli
reg exp. , 1234 girdiğimizde hatalı reg exp. uyarısını alırız.Eğer girilen string regular expressiona uygun ise
Regex.IsMatch metodu true döndürür. Bu örnekte ^\d{5}$ ifadesi şunları belirtir: string tam olarak 5 numerik digit
olmalı. ^ işareti stringin başlangıcını, \d numeric digit olduğunu {5} 5 karakter olacağını ve $ ise stringin sonunu gösterir.
Eğer ilk karakteri silerseniz patternin anlamını büyük ölcüde değiştirmiş oluruz. \d{5}$ 5 numarayı doğrular
fakat abcd12345 i de doğru kabul eder. REgular exp. ile karışık giriş patternleri kullanılabilir. aşağıdaki kodda
email adres karşılaştırması görülüyor.
^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))
([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$
- regular exp kullanıcı girişlerini kontrol etmek için oldukça etkindir fakat onlarında kusuru vardır: Regular exp. zordur, formatlara fazlasıyla aşina olmadıkça reg. exp formatı oluşturmak zordur.
Text Karşılaştırma Nasıl Yapılır?
Regular exp. basit kullanımı, bir string ile bir formatın karşılaştırması işlemidir. Örneğin; regular exp formatı: abc olsun karşılaştırılan stringler ise abc,abcde,veya zabc olsun; tüm karşılaştırmalar geçerlidir çünkü hepsi formattaki ifadeyi içermektedir.özel karakterlere gerek duyulmamıştır.
Yazının Beliritilen Bir bölümündeki Texti Karşılaştırma
Eğer bir yazıyı ilk karakterinden itibaren karşılaştırma yamak istiyorsanız stringin ilk karakteri (^ ) olmalıdır. Örneğin, regular exp. ^cde olsun, stringiniz, cde, cdef ile eşleşir, fakat zcde ile eşleşmez.REgular exp. son karakteri ($) olursa karşılaştırılacak ifadenin sonuna bakılır. Örneğin; abc$ regular exp olursa, abc, asabc, eşleşir fakat, abcd eşleşmez.Peki hem ^hem de $ olursa ^klm$ sadece klm yazısını eşleştirebilir, aklm yada klme yazıları eşleşemez.
Kelimeleri ararken \b metakarakterini kullanırız, bu karakter kelime için sınırdır. Örneğin; car\b ancak car veya tocar ile eşleşirken carburator ile eşleşmez. Benzer şekilde \B karakterinin ise sınırı kelimenin sonu değildir. karakteri kelimenin içinde arar, carburator eşleşirken , tocar eşleşmez.
Aşağıdaki tabloda karakterlerin görevleri veirlmiştir, en önemli olan ^ve $ karakterleridir.
| ^ | Her stringin ilk karakteri olduğunda eşleştirmeye baş kısımdan başlar. REg expifadesinin var olmadığını kontrol eder. ^abc ***** abcdf eşleşir. |
| $ | Eşleştirmede sona bakar $dif ******* redif eşleşir. |
| $ | Eşleştirmede sona bakar $dif ******* redif eşleşir. |
| \A | Eşleştirme yapılacak stringin ilk karakterini belirtir. |
| \Z | Eşleştirme yapılacak stringin son karakterini belirtir. |
| \Z | Eşleştirme yapılacak stringin son karakterini belirtir. |
Bir çok reg exp kodu \ ile başlar.. c# da program geliştirdiğimiz için, \ işareti
tam olarak işlenmemiş olduğundan @ kullanmalıyız..
Regex.IsMatch(“pattern”,@”\Apattern\Z”)
Özel Karakterleri Nasıl Karşılaştırırız?
Regular exp içersinde özel karakterleri karşılaştırma için kullanabilirsiniz. Örneğin \t bir tab sunarken,\n yeni bir satır sunar.Aşağıdaki tabloda hangi karakterinne iş yaptığı gösterilmiştir.
\a Matches a bell (alarm). The same as \u0007.
\b In a regular expression, \b denotes a word boundary
(between the \w and \W characters).
\t Matches a tab. The same as \u0009.
\r Matches a carriage return. The same as \u000D.
\v Matches a vertical tab. The same as \u000B.
\f Matches a form feed. The same as \u000C.
\n Matches a new line. The same as \u000A.
\e Matches an escape. The same as \u001B.
40 Matches an ASCII character as octal, up to three digits.
(40 represents a space and is provided as an example;
any three digits will work.)
\x20 Matches an ASCII character using hexadecimal
representation (exactly two digits). (\x20 is provided as an
example; any two digits will work.)
\cC Matches an ASCII control character—for example, \cC is
Ctrl-C. (\cC is provided as an example; any character will
work.)
\u0020 Matches a Unicode character using hexadecimal
representation (exactly four digits). (\u0020 is provided as
an example; any four digits will work.)
\ When followed by a character that is not recognized as an
escaped character, matches that character. For example,
\* represents an asterisk (rather than matching repeating
characters), and \\ represents a single backslash.
Wilcardları kullanarak text karşılaştırmada
Tekrar eden karakterler içinde regular exp kullanabilirsiniz.* sembolü sıfır yada daha fazla karakteri eşleştirmek için kullanılır. Örneğin to*n; ton ,toon veya tn ile eşleşebilir. + sembolüde benzer çalışır fakat 1 veya daha fazla karakteri temsil eder.to+n karakterleri ton veya toon ile eşleşir. tn ile eşleşmez.
Belirtilen sayıda tekrar eden karakteri karşılaştırmak için, {n} kullanılır. burada “n” bir digitdir. Örneğin, to{3}n ;tooon ile eşleşir fakat ton veya tn ile eşleşmez. Belli bir aralıkta tekrar eden karakteri eşleştirmek için {min,max} kullanılır, Örneğin: to{1,3}n ton veya tooon ile eşleşirken tn veya toooon ile eşleşmez.Sadece belirtilen minumum karakter yazılıp maksimum boş bırakılırsa to{3,}n toooon ile ve daha fazla o içeren karakterlerle eşleşir.
Tek bir karakteri opsiyonel yapmak için ? sembolü kullanılır. örneğin “to?n” sözcüğü ”ton” veya “tn” ile eşleşirken “tooon” ile eşleşmez.Herhangi bir tek karakter için eşleştirme yapmak ise ”.” ile sağlanır. örneğin “to.n” sözcüğü “totn” veya “tozn” ile eşleşir fakat “tn” veya “ton” ile eşleşmez.
Bir seferde farklı karakterleri eşleştirmek için köşeli parantez kullanılır. ”de[ri]nlik” sözcüğü ”dernlik” veya “deinlik” ile eşleşirken “derinlik” ile eşleşmez.Belli bir aralıktaki karakter eşleştirmesi için ise “a[c-f]m” sözcüğü acm, adm, aem ,afm sözcükleri ile eşleşirken agm yada abm ile eşleşemez.
Aşağıdaki tabloda regular exp karakterleri çoklu karşılaştırma veya belli aralıkta karakter karşılaştırma eylemler için özetlenmiştir.
bir gurup karakteri parantez içine alarak eşleştirmeye dahil edebiliriz. örneğin
“foo(loo){1,3}hoo” sözcüğü
fooloohoo ve fooloolooloohoo ile eşleşebilir.
foohoo veya fooloolooloo ile eşleşemez.
BENZER olarak foo(to|yo)go sözcüğü
footogo veya fooyogo ile eşleşebilir.
Bir gruba isim verebilirsiniz, böylece karşılaştırılan guruptan veriyi alabilirsiniz. guruba isim vermek için şu formatı kullanabilirsiniz:
?<isim>pattern
örneğin foo(?<mid>loo|roo)hoo sözcüğü fooloohoo ile eşleşir. Daha sonra mid gurubunun referansını almak istediğinizde size loo getirilir. aynı şekilde eğer fooroohoo ile eşleştirme yaparsanız mid gurubu roo yu içerir.
BACKREFERENCES İLE KARŞILAŞTIRMA NASIL YAPILIR
backreferens tekrar eden gurubun karakterlerini bulmak için uygun bir yol sağlar..

