Regular Expressions (Düzenli İfadeler) - ASP Webmaster bilgi bankası, knowledge base Webmaster Araçları

AnaSayfa > ASP > Regular Expressions (Düzenli İfadeler)
Kategori: ASP
Gönderen: Admin
Tarih: 2008-12-07
Puan: 1   Puan:1 | Katılımcı:1 | Katılımcı : 1
Okunma: 5887
  
 
1 puan 2 puan 3 puan 4 puan 5 puan 6 puan 7 puan 8 puan 9 puan 10 puan

Reguler Expressions türkçesiyle düzenli ifadeler ASP´de hakkında en az şey bilienen ama o kadar da merak edilen bir konudur. Merak edilir çünkü bu konuda internette türkçe kaynak bulmak çok zordur. Bende bu açığı kaptmak için bu konuyu işlemeye karar verdim. Reguler Expressions (bundan sonra kısaca RegExp diyeceğiz) aslolarak vereceğimiz bir string içinde yine vereceğimiz bir stringi yada deseni aramaya yarar. Ve arama sonuçlarını bir Matches nesnesine atar. Siz daha sonra bu arama sonuçlarıyla işlem yapabilirsiniz. Önce açıklamalı bir örnek verelim. Daha sonrada RegExp nesnesini incelemeye başlayalım.

<%
´Değişkenlerimizi tanımlıyoruz.
Dim nRegExp,nMatches

´Yeni bir RegExp nesnesi oluşturuyoruz.
Set nRegExp = New RegExp

´Aranacak desenimizi belirliyoruz.
nRegExp.Pattern = "aranacak kelime"

´Küçük büyük harf duyarlılığını belirliyoruz.
nRegExp.IgnoreCase = True

´Arama yöntemimizi belirliyoruz.
nRegExp.Global = True

´Arama olayımızı çalıştırıp sonuçları bir Matches nesnesine atıyoruz.
Set nMatches = nRegExp.Execute("içinde arama yapılacak string")

´Arama sonuçları ile ilgili işlemlerimizi yapıyoruz.
i = 1
For Each nMatch in nMatches
Response.Write "Arama sonuçlarında " & i & ". sonuç baştan " & nMatch.FirstIndex & " harften başlıyor.<br>"
i = i + 1
Next
%>

RegExp Özellikleri


Global
Boolean bir değer alır ve aramanın nasıl yapılacağını belirler. True yada False değeri alır. Eğer True olursa string içinde ki tüm uyumlar aranır.False olursa sadece ilk uyum aranır. Doğal olarak geriye tek bir sonuç döner.


IgnoreCase
Aramada küçük büyük harf duyarlılığını belirler. True yada False değeri alır. True olursa aramada küçük büyük harf uyumu gözetilmez. False olursa küçük büyük harf uyumu gözetilir.


Pattern
RegExp´in verilen string içinde arayacağı deseni belirler. Bu desen bir yada daha çok harf yada sayıdan oluşan bir kelime yada cümle olabilir. Veya en sonda pattern tanımlama bölümünde de işleyeceğimiz gibi karmaşık yapıdan oluşan bir arama deseni de olabilir.

<% nRegExp.Pattern = "(www|http://|ftp|file://)S+" %>

gibi. Bu konuyu en sona bırakıp geçiyoruz.

RegExp Metodları


Execute

Aramayı yürütmeye ve sonuçları her bir sonuç için bir match nesnesi oluşturup bunları bir matches koleksiyonuna eklemeye yarar. Nasıl kullanıldığını örneğimizde gördünüz.


Replace
Aramada bulunan texti yer değiştirmek için kullanılır. Açıkcası kitaplarda böyle yazmasına rağmen nasıl kullanıldığına dair henüz bir örnek bulamadım.

<% nRegExp.Replace(String1,String2) %> şeklinde kullanılıyormuş.


Test
Arama yapıp sonuçlarını bir matches nesnesine atamadan önce stringimiz içinde desenimizin olup olmadığını sınar. Yani bir nevi arama yapar ama sonuçları matches nesnesine atmaz. Sadece eğer aranan desen string içinde varsa True yoksa False değeri döndürür.

<% Sonuc = nRegExp.Test("içinde arama yapılacak string") %>

Eğer aranan desen string içinde varsa Sonuc değeri True, yoksa False olarak döner. Bunu nasıl kullanabilirsiniz. Mesela bir email adresi deseni tanımlayıp eğer sonuç true dönüyorsa email adresini doğru kabul eder. Değilse kullanıcıya bu mail adresinin geçersiz olduğunu bildirirsiniz. RegExp ile ilgili gerekli bilgiyi aldıktan sonra şimdi de arama sonuçlarını nasıl değerlendirebileceğimizi görelim.


Match ve Matches Nesneleri


Matches nesnesi aslında match nesnelerinin bir koleksiyonudur. Bir yada daha fazla matches nesnesini içinde bulundurur. Bir matches koleksiyonu daha doğrusu match nesneleri RegExp´in execute metoduyla oluşturulur. Bir match nesnesi bulunan her bir arama sonucunu bulundurur.


Matches Nesnesi Özellikleri


Count

Toplam kaç tane arama sonucu olduğunu bize bildirir.

<%
Function RegEx(desen,MyString)
Dim nRegExp
Set nRegExp = New RegExp
nRegExp.Pattern = desen
nRegExp.IgnoreCase = True
nRegExp.Global = True
Set nMatches = nRegExp.Execute(MyString)
RegEx = nMatches.Count
End Function

Response.Write RegEx("a","arama arama bende akıl arama")
%>

Bize 10 değerini döndürür. Çünkü aradığımız "a" harfi "arama arama bende akıl arama" stringi içinde 10 tane bulunuyor.


Item
Matches koleksiyonundan anahtarı verilen arama sonucunu bize getirir. Yada anahtarı verilen maddeye yeni değer atanabilir.

<% deger = nMatches.Item(i) %>

i yukarda ki örneğimize göre 0 ile 9 arası bir tam sayı olabilir. 10 tane sonucumuz var neden 9´a kadar derseniz bildiğiniz gibi dizilerde eleman sayısı 0´dan başlar. Ve yine yukarda ki örneğimize göre tüm Item değerleri bize "a" sonucunu döndürecektir. Çünkü aradığımız desen basit ve sadece "a" harfini arıyoruz. Dolayısıyla tüm arama sonuçları bize "a" olarak dönecektir. Eğer kompleks bir desen ifade etseydik bu Item değerleri değişirdi. Kompleks bir desen nasıl ifade edilir en sonda.


Match Nesnesi Özellikleri


<%
Dim nRegExp,nMatches
Set nRegExp = New RegExp
nRegExp.Pattern = "aranacak kelime"
nRegExp.IgnoreCase = True
nRegExp.Global = True
Set nMatches = nRegExp.Execute("içinde arama yapılacak string")

i = 1
For Each nMatch In nMatches
Response.Write "Arama sonuçlarında " & i & ". sonuç baştan " & nMatch.FirstIndex & " harften başlıyor."
Response.Write "Uzunluğu " & nMatch.Length & " karakter."
Response.Write "Sonuç değeri " & nMatch.Value
Response.Write "<br>"
i = i + 1
Next
%>

Match nesnesi bulunan arama sonucudur. Ve aşağıda ki özellikleri bulunur.


FirstIndex
Arama sonucunun baştan kaçıncı karakterden başladığını verir. Soldan ilk karakter 0´dan başlar.

<%=nMatch.FirstIndex%>


Length
Arama sonucunun text uzunluğunu döndürür. Yukarda sadece "a" harfini aradığımız örnekte tüm length değerleri 1 olur.Ancak kompleks desen tanımlamalarında bu değer her arama sonucu için değişebilir.

<%=nMatch.Length%>


Value
Arama sonucunun değerini döndürür. Aslında arama sonuç değeri için nMatch.Value demek çokta gerekli değildir. nMatch.Value yerine sadece nMatch demenizde size arama sonuç değerini verir. Yukarda ki örneğe göre

<% Response.Write "Sonuç değeri " & nMatch.Value %>
ile
<% Response.Write "Sonuç değeri " & nMatch %>

aynı kapıya çıkar.



RegExp´de Pattern Tanımlama
5,7 gibi bir sayıyı RegExp ile aşağıdaki gibi ifade ederiz.

/d*.d+/

Düzenli ifadeler / ile başlayıp / ile biter

d ==> 0 ile 9 arası bir rakamı gösterir.
* ==> 0 veya daha fazla demektir.
. ==> . (nokta) manasındadır.
+ ==> 1 veya daha fazla demektir.

Desenler
-----------------------
Desen bir karakter dizilimi için oluşturulan sınama kriterleridir. Yukardaki /d*.d+/ 5,7 için oluşturulmuş bir desendir.

Değiştiriciler
-----------------------
Arama için desenlere eklenebilecek bazı değiştiriciler bulunur. Bu değiştiriciler sondaki / işaretinden sonra yazılırlar. Mesela /metin/ desenini bir string içinde arayacakken aşağıdaki değiştiricileri ekleyerek arama seçeneklerini artırabiliriz.

/metin/g ==> Genel uyum(yazıldığı gibi)
/metin/i ==> Küçük büyük harf duyarsız
/metin/m ==> Dizilim içinde çoklu karşılaştırmalar için $ ve ^ özel karakterlerine izin verir
/metin/s ==> Satırbaşı (newine) karşılaştırmaları için . özel karakterine izin verir
/metin/x ==> Desendeki beyaz boşlukları (whitespaces) göz ardı eder.

Birden çok değiştirici birbirini / işaretleri ile izleyebilir.

/metin/m/i/s

Meta karakterler
------------------------
Meta karakterler işaretinden sonra gelen ve deseni tanımlarken bize seçenek sağlayan özel karakterlerdir.

s Sekme veya satırbaşı gibi beyaz boşluklar (whitespaces)
S Beyaz boşluklar dışındaki tüm karakterler
 Sözcük bağlayıcısı
B Sözcük olmayan bağlayıcılar
d 0-9 arasındaki bir rakam
D Sayısal olmayan karakterler
w Harfler, rakamlar veya altçizgi
W Harf, rakam veya altçizgi dışındaki tüm karakterler
A Bir karakter diziliminin başı
 Bir karakter diziliminin sonu

Özel Karakterler
-------------------------
Meta karakterler gibi bize desenimizi tanımlamamızda süzme görevi sağlayan özel karakterlerdir. / işaretinden sonra gelmezler.

* Önünde bulunan karakterin sıfır veya daha çok tekrarlanacağını ifade eder.
+ Önünde bulunan karakterin bir veya daha çok tekrarlanacağını ifade eder.
? Herhangi bir karakterin sıfır veya daha çok tekrarlanacağını ifade eder.
. Satırbaşı (newline) karakteri hariç herhangi bir karakteri ifade eder.
^ A meta-karakteri gibi bir karakter diziliminin başını gösterir.
$  meta-karakteri gibi bir karakter diziliminin sonunu gösterir.

Burda görüldüğü gibi * , + , ? , . , ^ , $ işaretlerini kendi manalarında yani özel karakter olarak değilde mesela . ´yı nokta olarak ifade etmek için önüne ters bölü() konmalıdır.

Bu son Pattern tanımlama bölümünü <a href="http://activez.cu.edu.tr/content/cyberspace/aspplus/RegExpression.aspx" target="_blank">http://activez.cu.edu.tr/content/cyberspace/aspplus/RegExpression.aspx</a> adresinden aldım. Biraz karışık olabilir.





Yorumlar
Henüz Kimse Yorum Yapmamış, ilk yorumu siz ekleyin!
Yorum Ekleme Aparatı
Yorum Eklemek için lütfen sol menuden giris yapınız..
Toplam 0 yorum listelendi.