Bu aralar regex ile devam ediyorum. bugun oracleda ihtiyacım oldu düzenli ifadelere kullanırken aklıma geldi bloguma da eklim dedim.

Oracle Regex Fonksiyonları : 

Fonksiyon Açıklama
REGEXP_LIKE LIKE gibi çalışır ama katar tanımlamanıza olanak sağlar.
REGEXP_INSTR Katara uyan ilk eşleşmenin ilk karakterinin indisi olarak döner.
REGEXP_REPLACE Klasik Regexp replace işi yapar.
REGEXP_SUBSTR Katara eşleşen metin olarak döner.

 Örnekler :

REGEXP_LIKE :

0
SELECT *FROM HASTALAR WHERE  REGEXP_LIKE(HASTA_ADI,'([A-Z]+)','c');

ilk parametremiz arama yapacağımız alan ya da metnin kendisi, ikincisi katar görüntüsü üçüncü parametremiz de regex ayarları oluyor.

Bu sorgunun sonucunda bize sadece büyük harflerden oluşmuş isimler gelir.

Regex Ayarları: 

Fonksiyon Açıklama
c Büyük küçük harf duyarlı eşleşme (varsayılan)
i Büyük küçük harfe duyarsız eşleşme
n “match-any-character” ayarını açar. (sadece acıkken nokta satır sonu ile de eşleşir)
m multiline ayarı (:

REGEXP_INSTR:

 

0
SELECT REGEXP_INSTR('TUFAN BARIS YILDIRIM 123','([0-9]+)') FROM DUAL

sorgu sonucunda katara ilk eşleşen kısım “123″ olacağından ilk karakterinin yani ” 1″ in indisi  yani 25 sonucunu alırız

REGEXP_SUBSTR

 

0
SELECT REGEXP_SUBSTR('TUFAN BARIS YILDIRIM 123','([0-9]+)') FROM DUAL

sorgu sonucunda katara ilk eşleşen kısım “123″ olacağından bize 123 olarak döner. ilk eşleşmeden sonrakileri almak istiyorsak regexp_replace kullanrız.

REGEXP_REPLACE

 

0
SELECT REGEXP_REPLACE('TUFAN BARIS YILDIRIM 123','([A-Z]+)([\s]+)([0-9]+)','rakamlardan onceki son kelime : \1') FROM DUAL

sorguda ilk önce katarı  inceleyelim  3 gruptan oluşuyor ilk grubumuz büyük harf(ler) ikincisi boşluk(lar) üçüncü grubumuz rakam(lar) replace işleminde kullandığımız \1  eşleşen grubun indisin belirtir bulduğumuz sonucu ilk grup ile değiştirip cıktı olark alıyoruz.  eşleşen grup  “YILDIRIM 123″  olur  replace işleminde  ilk grubu yerine yazarsak bize
“rakamlardan önceki son kelime : YILDIRIM” diye döner.

bi dahaki regex ya da oracle yazımızda görüşürz inş  iyi çalışmalar..

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  

© 2012 Tufan Suffusion theme by Sayontan Sinha