You are on page 1of 4

Gene u skc dzenli ifadeler deil mi?

Bu makalede dzenli ifadelerin ne kadar etkileyici olduunu bir rnek zerinde anlatmaya alacam. Web sitelerinin birebir kopyasn kendi bilgisayarnza kopyalayan ( Teleport gibi) programlar bilirsiniz. nce bir sayfann kaynak kodunu indirir. indeki linkleri ve resim dosyalarn belirler. Sonra sra bu link ve resim dosyalarna gelir. Hi elinizdeki kaynak kodun linklerini nasl ayklayacanz dndnz m? te dzenli ifadeler burada gerekten harikalar yaratr. Fazla uzatmadan rneimize geelim... E-Mail Yakalayc

imdi yapacamz rnekte nce bir web sitesinin kaynak kodunu indirip, ierisindeki e-mail linklerini elde edeceiz. ncelikle sayfann kaynak kodunu indirelim Bunun iin iki basit metod yazdm. lki sayfann adresini kullancdan alyor, ikincisi sayfaya balanp kaynak kodu indiriyor :

// Adresi Alan Metod : private string AdresiAl() { string adres="http://" + txtAdres.Text; return adres; } // Sayfann Kaynak Kodunu Dndren Metod : private string KaynakAl(string adres) { lblStat.Text="Siteye Balanyor..."; WebResponse benimResponse=null; try { WebRequest benimWebRequest=WebRequest.Create(adres); benimResponse=benimWebRequest.GetResponse(); } // Eer internet balants yoksa yada site adresi yanl ise : catch(WebException e) { lblStat.Text="Siteye Balanamyor."; return null; } // Site ierii stream olarak alnyor : Stream str=benimResponse.GetResponseStream(); StreamReader reader=new StreamReader(str); string kaynak=reader.ReadToEnd(); // Tm ierik kk harfle dndrlyor.

//Daha fazla kontrol yapmamak iin bir nlem return kaynak.ToLower(); }

Sayfann kaynak kodunu indirdikten sonra iindeki e-mail linklerini bulup bir diziye atan bir baka fonksiyon daha yazdm. ncelikler e-mail linkini yakalayan deseni (pattern) aklamaya alalm. Bildiiniz gibi e-mail linkleri <a href="mailto:aaa@bbb.ccc"> gibi ifade edilir. O zaman desenimiz (href=) ifadesi ile balamaldr. Ardndan () yada (") karakterleri gelebilir.
"(href=)(()|(""))" Sonra "mailto:" ifadesi gelir :

"(href=)(()|(""))(mailto:)" "mailto:" ifadesinden sonra istediimiz ifade yani e-mail adresi gelir. Bunu "mail" isminde bir grup tanmlayarak elde edeceiz. "(href=)(()|(""))(mailto:)(?<mail>(.*))" // (.*) ifadesi kendinden sonra gelen desene kadar her karakteri alan bir desendir. imdi desenimizi sonlandralm : "(href=)(()|(""))(mailto:)(?<mail>(.*))(()|(""))"

Ksaca, "mailto:" ile trnak karakterleri arasndaki her ifade bizim iin mail grubuna dahil oldu. imdi E-mail adreslerini dizi eklinde dndren metodumuzu yazalm :
// Sayfann iindeki mail adreslerini dizi eklinde dndren metod : private string[] MailAl(string kaynak) { lblStat.Text+= "Kaynak kod alnd... " + "Mailler ayrtrlyor... "; // Desenimiz : string mailDeseni=@"(href=)(()|(""))(mailto:)(?<mail>(.*))(()|(""))";

int i=0; // Regular Expressionumuzu tanmlyoruz : Regex benimRegex=new Regex(mailDeseni); Match str=benimRegex.Match(kaynak); // Oluturduumuz deseni sitenin kaynak kodunda karlatryoruz : MatchCollection mailCol=benimRegex.Matches(kaynak); string[] mail=new string[mailCol.Count]; // Bulunan her e-mail adresini mail[] dizisine atyoruz : foreach(Match mailMatch in mailCol) { mail[i]=mailMatch.Groups["mail"].ToString(); i++; } return mail; }

imdi Yakala butonuna baslnca icra edilecek olay kodunu yazalm :


// imdi e-mail yakalamak iin bu yazdmz metodlar button_Click olay ile birletirelim : private void btnYakala_Click(object sender, System.EventArgs e) { lblStat.Text=""; if(txtAdres.Text=="") { MessageBox.Show("Ltfen Bir Adres Girin !"); } else { // Sitenin Adresini alyoruz : string adres=AdresiAl(); // Sitenin Kaynak Kodunu alyoruz : string kaynak=KaynakAl(adres); // E-Mail adreslerini alyoruz : if(kaynak!=null) { string[] mail=MailAl(kaynak); lblStat.Text+="lem sona erdi." + mail.Length + " tane mail adresi yakaland."; foreach(string yakalananMail in mail) { // Her e-mail adresi listboxa giriliyor : lbxEmail.Items.Add(yakalananMail); } } } } Aklama Baz sitelerde frameset kullanldndan sayfada e-mail linki grlse bile

programmz bunlar dndrememekte. Bu sayfalarn framelerinin linkleri verilerek e-mail adresleri elde edilebilir. Yine baz sitelerde linkler javascript kodu ile eriildiinden bu adreslerde programmz tarafndan eriilememektedir.

You might also like