Üye Kayıt Üye Giriş

Regular Expression Konusuna Giriş


Regular Expression Konusuna Giriş

 

Regular Expression Nedir?

Regular Expression, veriler içinde, istediğinize göre belirleyebileceğimiz kompleks sözdizimine sahip ifadeleri bulmak için kullanılan bir tekniktir. Bu teknik bir string içinde başka bir string bulmamıza ve istersek değiştirmemize yarar. Sözdizimi oluşturmak için kullanabileceğimiz birkaç yöntem vardır:
- Karakter Uyuşması
- Tekrarlanma Uyuşması
- Pozisyon uyuşması

1. Karakter Uyuşması: Belirlediğimz karakterlerin string içinde aramamıza yarar.
Örnek:
dogma

Başka bir örnek:
d.gma

"Nokta" karakteri, Regular Expression içinde özel bir karakterdir ve herhangi bir karakter yerine geçebilir. Yani yukarıdaki ifade
dAgma dBgma d9gma dogma d0gma..
ifadelerini çağırır.

Burada "Nokta" ile her karakteri arayacağımız gibi istediğimiz karakterler içinde arama yapılmasını da sağlayabiliriz:
[1234]dogma
Sonuç:
1dogma, 2dogma, 3dogma, 4dogma

Bunu bir diziye dökecek olursak:
[1-9]dogma
Sonuç:
1dogma, 2dogma,...,8dogma, 9dogma

Tabi burada rakam yerine harf de kullanabiliriz:
[a-d]dogma
Sonuç:
adogma, bdogma, cdogma, ddogma

2. Tekrarlanma Uyuşması: Regular Expression'ın derinleme araştırma yaparak gücünü gösterdiği bölümdür.
Örneğin dogm ve dogma çıktısını istiyoruz. Bunun için başka bir özel karakter kullanmalıyız: "Soru İşareti"
dogma?

Sonuç:
dogm, dogma

Soru işareti, soru işaretinin sıfır ve bir solundaki karakterler düşürülerek araştırılır.

Peki "dogma?" veya "dogma.?" şeklinde çıktı istiyorsak ne yapmalıyız? Kelimesi kelimesine arama için özel karakterlerden hemen önce bir ters bölü işareti (\) koymalıyız.
Yani dogma\?
Sonuç sadece dogma? değerini döndürür.

Diğer bir özel karakter yıldız işaretidir (*, asteriks). Bir önceki karakterle uyuşan sonuçlar çıkarır.
Örnek:
dogma*

Sonuç:
dogma, dogmaa, dogmaaaaaaa...

Burada son harfin değil bir grubun tekrarlanmasını istiyorsanız parantez kullanabilirsiniz.
Örnek:
dog(ma)*

Sonuç:
dogma, dogmama, dogmamamama...

Burada "ma" ifadesinin tekrar sayısı sınırsızdır. İfadenin kaç kere tekrar edileceğini de sınırlayabilirsiniz.
Örnek:
do{3}gma

Sonuç:
dooogma

Kısaca özel karakterlerin anlamları: \ | ( ) [ { ^ $ * + ? . < >
\ : Özel karakterleri normak karakter olarak kullanabilmemizi sağlar.
| : Veya anlamına gelir: "[ht|f]tp:" Çıktısı http: veya ftp: olur.
( : Grup başlatır.
] : Grup sonlandırır.
[ : Diziler oluşturmamızı sağlar. [A-Z]
{ : Tekrar sayısı belirmebilmemizi sağlar.
^ : Aranan ifadenin, string içinde en başta aranmasını sağlar.
$ : Aranan ifadenin, string içinde en sonda aranmasını sağlar.
* : 0 ya da daha fazla ifadeyi string içinde arar.
+ : 1 ya da daha fazla ifadeyi string içinde arar.
? : Kendinden önceki bir ifadeyi düşürerek arama yapar.
. : Kendi bulunduğu yere herhangi bir karakter koyarak arama yapar
< : İfadenin, string içinde tam olarak geçmesini sağlar: <kelime>


3. Pozisyon Uyuşması: Aranılan ifadenin string içindeki yerini de belirlememizi sağlar.
İfadenin, string içinde en başta olmasını istiyorsak başına ^ koymamız gerekir.
Örnek:
^dogma
Burada, string dogma ile başlıyorsa sonuç başarılıdır.

Eğer string içinde en sonda olmasını istiyorsak sonuna $ koymalıyız.
Örnek:
dogma$
Burada da, string dogma ile bitiyorsa sonuç başarılıdır.

Sık Kullanılan uygulamalar için bazı hazır diziler geliştirilmiştir:
\d = [0-9]
\D = [^0-9]
\w = [a-zA-Z0-9]
\W = [^a-zA-Z0-9]
\s = [ \t\n\r\f]
\S = [^ \t\n\r\f]


Artık Regular Expression konusunun temelini biliyoruz. Aşağıdaki örnekler yardımıyla kendi sözdiziminizi yazarak kendi kontrollerinizi oluşturabilirsiniz.

Telefon Numarası Doğrulama:
0(XXX)-XXX-XX-XX

Aradığımız karakterler:
Sıfır Parantez Açma 3 Adet Rakam Parantez Kapama Çizgi 3 Adet Rakam Çizgi 2 Adet Rakam Çizgi 2 Adet Rakam

Regular Expression:
0\([0-9]{3}\)-[0-9]{3}-[0-9]{2}-[0-9]{2}

Şimdi teker teker ifadeleri açıklayalım:
0 : Numarada aranan sabit karakter.
\( : Parantez açıyoruz ancak parantez özel karakter olduğundan önüne bir ters bölü işareti koyuyoruz. (Parantez, gruplama da kullanlan özel karakterdir)
[0-9]{3} : Sıfırdan dokuza kadar olan karakterler üç defa bulunacak.
\) : Parantezi kapatıyoruz. Artık başındaki ters bölüyü anlatmama gerek yok sanırım.
- : Numarada aranan sabit karakter.
[0-9]{3} : Sıfırdan dokuza kadar olan karakterler üç defa bulunacak.
- : Numarada aranan sabit karakter.
[0-9]{2} : Sıfırdan dokuza kadar olan karakterler iki defa bulunacak.
- : Numarada aranan sabit karakter.
[0-9]{2} : Sıfırdan dokuza kadar olan karakterler iki defa bulunacak.

Bu örneğin VBScript ile kullanımı:
Direk örneğe geçmeden önce Regular Expression'da kullanılan 3 özellikten bahsedelim.
Pattern: Regular Expression'ı yazdığımız ifadedir.
IgnoreCase: Büyük-küçük harfe duyarlı olup olmayacağını belirtir. Varsayılan değer false'dir.Yani duyarlı değildir.
Global: Aramanın tüm string içinde yapılıp yapılmayacağını belirtir. Varsayılan değeri false'dir ve böyle bırakılırsa arama ilk sonuçtan sonra sona erer.

Üç özellikten sonra örneği yazabiliriz:
<%
'// Değişkenleri tanımlıyoruz
Dim ObjRegExp
Dim TumIfade
Dim Sonuc
Dim Ifade

'// Arama yapılacak ifade
TumIfade = "Telefon numarası örneği 1: 0(222)-222-22-22 Telefon numarası örneği 2: 0(222)-222-22-23"

'// Regular expression nesnemizi oluşturuyoruz
Set objRegExp = New regexp

objRegExp.Pattern = "0\([0-9]{3}\)-[0-9]{3}-[0-9]{2}-[0-9]{2}"
objRegExp.IgnoreCase = True
objRegExp.Global = True

// Aramayı sonuçlandırıyoruz
Set Sonuc = objRegExp.Execute(TumIfade)

Response.Write Sonuc.Count &" sonuç bulundu.<br \>" '// Sonuç sayısı

For Each Ifade In Sonuc
Response.Write Ifade.Value &"<br \>" '// Sonuç
Next
 

Bilgisayar Dershanesi Ders Sahibi;
Bilgisayar Dershanesi

Yorumlar

Yorum Yapabilmek İçin Üye Girişi Yapmanız Gerekmektedir.

ETİKETLER