MyDesign | Kod Arşivi - Anasayfaya Dön   No banner in farm
Anasayfa Araştır Forum Gelişmiş Arama Siteniz İçin En Hit İçerikler RSS İçerik Ekle Scriptler Destekleyenler Kadromuz Reklam İletişim Giriş Sayfası Yap  Sık Kullanılanlara Ekle
Bu Kategorinin En Yeni Makaleleri:


Bu Kategorinin En Çok Okunan Makaleleri:






Arama:
Gelişmiş Arama


No banner in farm



En Çok Görüntülenen Kodlar:


Üye Girişi:
 Üye Ol



Anasayfa > Asp > Makaleler

Regular Expression Konusuna Giriş

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.

Regular  Expression  Düzenli  İfade  RegExp 

Kategori: Asp
Gönderen: mYavuz
Tarih: 14 Kasım 2006
Okunma Sayısı: 59813
Puan: 8,2 / 22 Oy
Puan Ver:
Google Bookmarks  del.icio.us  Digg  Yahoo! MyWeb  Windows Live  Furl

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

'// Nesnelerimizi Kapatıyoruz
Set Sonuc = Nothing
Set objRegExp = Nothing
%>


Mail Adresi Kontrolü içinde şu ifadeyi kullanabilirsiniz:
[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+

Regular Expression Konusuna Giriş için yazılan yorumlar

Ayşe  { 14 Haziran 2013 }
Güzel bir anlatım olmuş, teşekkürler. Bende kendim bir kaç test yaptım ve uyguladım. Bir sorum olacaktı; bu telefon numaralarında tekrarlanan numaraları nasıl önleyebiliriz acaba? Yardımcı olabilir misiniz?

fluent  { 31 Mayıs 2012 }
hdetay.asp?id=305&s=3 şeklinde bir linkim var, bunu html şekline nasıl dönüştürebilirim, yani şöyle olmasını istiyorum. haber başlığım yeniyilamerhaba olsun yeniyilamerhaba_h305_s3.html bu linke tıkladığımda üstteki link açılsın istiyorum ama beceremedim

Mehmet Ali VATANLAR  { 11 Aralık 2011 }
Örnekleri biraz çoğaltabilirseniz daha güzel olabilir.

iismail  { 13 Eylül 2011 }
Güzel akıcı bir dille istenilen anlatılmış, teşekkür ederiz.

serkan  { 07 Mayıs 2010 }
Arkadaşlar, kullanıcı adı kontrolü için gereken regexp ifadesi nedir?

Ümit   { 06 Şubat 2010 }
Çok teşekkürler. Regular Expression işini %30 öğrendim. Bu da işimi gördü. Örnekleri çoğaltmanızı tavsiye ederim.

captiva_coder   { 24 Kasım 2009 }
güzel bir çalışma olmuş ellerine sağlık. devamını bekliyoruz ...

Can   { 09 Temmuz 2009 }
Mail Adresi Kontrolü içinde şu ifadeyi kullanabilirsiniz: [a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z0-9]+ yukaridaki ifadede noktadan sonraki kismi kisitlamamiz gerekiyor ve @ isaretinden onceki stringde ise _ veya - olabilir, [_a-zA-Z0-9-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9]{2,3})$

Korhan   { 22 Haziran 2009 }
güzel bir yazı olmuş buna ragmen regular expression ın yaygın olarak kullanıldıgı html taglerini barındıran string calışmalarına birkaç örnek versen daha iyi olabilirmiş

Serhat   { 05 Şubat 2009 }
Teşekkürler

ismail   { 28 Kasım 2008 }
Paylaşım için teşekkürler

Erdem   { 09 Temmuz 2008 }
Güzel yazı, teşekkürler...

burak güven   { 14 Nisan 2008 }
güzel bir anlatım olmuş, paylaşım için teşekkürler...

ahmet kızıl   { 17 Mart 2007 }
Makaleniz aracılığı ile RegExp konusuna başlangıç yaptım. 1-2 uygulama yaptım. RegExp in Test diye bir nesnesi var, bunun uygulanmasında hata alıyorum.

Yorum ekleyin

Bu sayfaya link verin:
Anasayfa > Asp > Makaleler > Regular Expression Konusuna Giriş
Kategoriler:


Forum:



Bağlantılar:


Murat Yavuz | Site Haritası | Gizlilik Bildirimi | 54.145.71.49 | 0,12 Saniye
© Copyright 2004-2017 MyDesign | Kod Arşivi. Tüm Hakları Saklıdır.
MyDesign | Kod Arşivi, en iyi görünüm için, 1024x768 ve üzeri çözünürlük tavsiye eder.