C# ile yazdığım Regexper exemi daha önce regexp konusunu analtırken yayınlamıştm şimdi  biraz daha renklendirdim. katarlar seçilince eşlerini otomatik göstermek gibi özellikler ekledim. ekran görüntüsü :

Regular Expression

indirmek için : http://www.tufyta.com/wp-content/uploads/2009/12/Regexper.zip

merhabalar,
  regexp kategorimizi açmışken boş bırakmayalım ilk örneğimiz çok eğlenceli bir parser css parçalicaz. (:

ilk once Css betiğinin yapısını bi görelim

0
1
2
3
4
5
6
7
8
9
10
#eleman{
font-size:11px;
padding:4px;
color:#fff;
}
.elemanlar{
background-color:#fff;
font-size:12px;
padding:4px;
color:#000;
}

ilk once blokları bir birinden ayrımamız lazım yani #eleman1 ve .elemanlar kendi ozelliklerini taşıyorlar her birinin ozellikleri kendisine ozel olacağından bunları birbirinden ayırmamız şart

tek bloğun görüntüsü şu şekilde olur

0
(\.|\#)?([A-Za-z0-9_-]+)(\s)*(\{)?([^\}\{]+)?(})?

şimdi bunları gruplara ayırarak açıklayalım

  1. (\.|\#)  bu elemanda 2 tane işaretçi kullandık biri (.)nokta diğeri (#)sharp  bunları normal bir string olarak kullanacağımızdan başına (\)backslash koyduk arasındaki ((|)cizgi (: )  herhangi biri ile eşleşebilir anlamına geliyor. bunun hemen sonrasına koyduğumuz (?) soru işareti bu katar olmayadabilir anlamında yani 0 ve ya 1 defa bulunabilir anlamındaydı yani 1inci eleman bize null da gelebilir  nokta da gelebilir sharp da gelebilr
    csste nokta gelince class. sharp gelince id boş gelince de bunun tag olduğunu anlıyoruz.
  2. ([A-Za-z0-9_-]+) bu grupta bir karakter seti tanımladık . hazır setlerden faydalandık büyük harf kücük harfler ve 0 dan 9 a tüm rakamlar setler [] içinde tanımlanır ve herhangi biri oluna eşleşme kabul edilir. ] dan sonra koyduğumuz (+)artı  bunların en az 1 tane içermesi gerektiğini belirtir 1den fazla da olabilir.
  3. (\s)  parantez içinde s kullansaydık bize string olarak s yi belirticekti gerçekte string olan  karakterleri işaretçi olarka kullanabilmek için yine başına (\)backslash yazıyoruz. space arıyoruz isimden hemen sonra ama sonunca (*) koyarak olmayadabilir  birden fazla da olabilir diyoruz ve kullanıcı için oraya istediği kadar boşluk atabilme özgürlüğü veriyoruz.
  4. (\{)  hemen sonrasında bir { süslü parantez aradık sonuna da ? koyduk yani ya 1 tane olucak ya da hiç olmayacak.  aslında bu olmak zorunda neden ? koyduk elimize gelen eşleşen[4] içini kontrol edip nullsa kullanıcıyı uyarabilmek için bu kontrolu koyduk. hiç eşleşmemesi de tabi ki kullanıcıyı zorlar bir derleyici gibi düşünelim kendimizi :P cok da şişmeyelim ama :D
  5. ([^\}\{]+) katarı oluşturan 5 inci grubumuz ise cok değişik (: [] set tanımlamak istemişiz ama içinde }{ ve ^var
    başına konulan ^ bu setten birini içermemesi gerektiğini gösterir yani { ve } içermeyen bir set bunun sonuna bir de + koyduk en az 1 karakter içericek. bu grubun da sonuna ? koyduk ya hiç olmicak ya da 1 tane olucak ki zaten burayı sonsuza kadar da yazsanız burası 1 eleman döndürür ta ki siz } veya { koyana kadar. bu eleman boş dönerse bunu yorumlama dışında bırakabiliriz çunku bir property yazılmamıştır. bi de uyarı veririrz:P
  6. (}) bu da en son kapatma elemeanımız bununda yine sonuna ? koyduk ki yokluğunda da bize eşleşme hatası vermesin boş dönsün biz de bunu uyaralım

elemanları birbirinden ayırdık dizimiz 7 eleman olarka dönecektir 1 tanesi eşleşen kısm yani [0] eleman. diğer 6 elemean da yukarda anlattıklarım
şimdi bir de propertyleri ayrımaya geldi sıra

propertyler bize 5 inci elemanda dönüyordu şimdi 5 inci elemanı parse edelim

bize gelen 5 inci elemanın içeriği aşağıdaki gibi olur

0
1
2
3
background-color:#fff;
font-size:12px;
padding:4px;
color:#000;

düzenli ifadesini yazalımn
Pattern:

0
([A-Za-z\-]+)(:)([^;]+)(;)?

bu da color:#fff;  yapısının görüntüsü sonundaki noktali virgul olmasa da olur dedik bazen sonlara konulmuyor şimdi
şimdi burdan da bize 5 eleman dönecek 1 tanesi tamamı  yani [0] eleman

1. eleman property adı : 2 eleman noktalı virgul 3 eleman değeri 4 eleman boş ya da noktalı virgul döner

ve biz de bunları istediğimiz şekilde yorumlar derler kullanırız artık

Testleriniz için Regexper exemi indirebilirsiniz.
http://www.tufyta.com/wp-content/uploads/2009/12/Regexper.zip

C# da yine regexp konusunda en yetenekli dillerden birisi   elesmeler içinde gruplar olarak dönderebiliyor. php deki preg_match_all gibi çalışıyor.

C# da regex kullanabilmek için System.Text.RegularExpressions paketini import etmeliyiz.
using bloguna using System.Text.RegularExpressions; ekleyerek yapabiliriz bunu

0
1
2
// Regex Türünde bir pattern adında değişkenimiz ve eşleşenleri dolduracağımız bir MatchCollection var.
Regex pattern=new Regex('(tufyta)\.(com)');
MatchCollection:eslesenler;
0
1
// eslesenler değişkenimizi dolduralım
eslesenler=pattern.Matches("http://www.tufyta.com www.tufyta.com");
0
1
2
3
4
5
eslesenler.count        // Görüntüye uyan Katar sayısı
eslesenler[x]           // Eşlesen katarlardan bitanesi
eslesenler[x].Groups    // Katrı oluşturan gruplar (MatchCollection tipinde)
eslesenler[x].Groups[y] // Gruplardan birtanesi.
 
// katarları bir döngüye yine içindeki grupları ayrı bi döngüye alıp istediğimiz yere bunları yazdırabilirz;

Örnek C# Uygulaması :
Regexper idirmek için tıklayın  

c ve türevi diller regexp konusunda çok yeteneklidir. tek başına bir alan olabilecek kapasitede yetenekleri vardır.

action scriptte regexp yeteneklerinden faydalanabilmek için kullanacağımız sınıf da Regexp tir.

r:RegExp=new RegExp("([A-Z])"),
eslesenler:Array=r.exec("bu metin içinden sadece BUYUK HARFLER ayristirilacaktir");

regexp türünde bir r ve Array türünde bir eslesenler  objemiz var.  r objesinin exec() metoduyla verdiğimiz stringi parcalar ve bize  Array olarak döner dönen bu grupları saklayabilmek için eslesenler adında bir dizi tanımladık.

eslesenler dizisine doldurduktan sonra istediğimiz gibi bu diziyi kullanabiliriz.
eslesenler.count eşleşen sayısını eslesenler[0] eslesenler[1] gibi istediğimiz elemana ulaşabilirz.

Örnek Bir Uygulama
http://www.tufyta.com/flexprojects/webregexper/webregexper.html

Kaynak Kodlar :
http://www.tufyta.com/flexprojects/webregexper/srcview/index.html

match yapmadan önce 1 kere logs tabını ziyaret etmelisiniz.

© 2012 Tufan Suffusion theme by Sayontan Sinha