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

 

Regular Expression nedir ?

Kitabın bundan sonraki bölümlerinde Regex diye anacağım (Regexp diye kısaltılır ama okunuşu kolaylaştığı için Regex diyeceğim.) Regular Expression (Düzenli İfadeler) , belli düzeni olan karakter topluluklarının kurallı bir görüntüsünü (desen) yazarak tanımlayabileceğimiz ya da kontrolünü yapabileceğimiz bir dil olarak kabul edilebilir. Belli düzeni olan karakter topluluğu diye bahsettik ama eğer bir düzeni zaten varsa bunu programlamaya neden ihtiyaç duyuyoruz? Diyebilirsiniz. Esnek bir düzeni varsa bu toplulukların işte o zaman Regex bizim için eşi bulunmaz bir yardımcı olacaktır.

Elimizde bir figür olduğunu düşünelim. Bu figürün bir insan şekline denk gelip gelemeyeceğini nasıl tespit edebilirsiniz? Biyolojik zorunluluklar dışında bir insan şeklini tanımlamanın şartları şunlar olabilir mi ? Regex, soyut kavramları tanımlamada kullanılamadığı için vereceğim örnekler görüntü ile alakalı olacaktır.

  • 2 ayak, 2 el (her elde 5 parmak), gövde, baş, 2 göz, 2 kulak

Normal bir insan bu tanıma uyar mı? Evet, uyar ve insan ayırt etmeden bu görüntü her insan için geçerlidir. Şimdi insanlar arasından seçeceklerimize görünümle ilgili birkaç kıstas daha ekleyelim

  • Minimum boy: 180 cm

İnsanların çoğunu bu kıstaslarla eleyebiliriz aradığımız insanı bulmaya doğru gidiyoruz.

  • Gözlük, Şapka(olmayabilir)

2 ölçüt daha ekledik fakat ölçütlerin biri seçmeli oldu yani eleme işini o yapamayacak. Gözlük şartıyla yine elemiş olduk

İnsanlar arasından aradığımız insan modeline uyanları seçmek için kriterler belirledik ve aradığımıza gidebilmek için kriterleri arttırdık hatta tam sayılar vererek katılaştırdık. Regex’te de kurallarınız ne kadar katıysa o kadar kesin, bir o kadar da az sonuç alırsınız.

Regex Deseni oluşturmadan önce

Regex desenleri oluşturmaya başlamadan bir önceki metinde değindiğimiz kriterleri tek tek yazmanız ve bulabileceğiniz sonuçları tartmanızda fayda vardır. İnsan modelleme örneğine başlamadan önce şu soruları sorabilirdik: 2 ayağı olan kaç insan bulurum? , 2 gözü olan kaç insan bulurum ?. bunlar insanda ayır edici özellik değildir. Bulmak ya da elemek istediğimiz elemanlarda ayırt edici özellik aramak bizim için en kolay yöntem olacaktır. Bunları desen oluşturmadan önce tartışmamız, bazen aramadıklarımızın aradıklarımızdan daha az olduğunu gösterebilir. İsminde ünlülerden sadece “aeıioöu” harflerden birini içerenleri taramak mı kolay sizce “ü” geçmeyenleri taramak mı? Regexte bizi hızlandıracak nokta bu olacaktır. Aradıklarımız mı? Aramadıklarımız mı?

  Meta Karakterler
^ Metin Başlangıcı (multiline modunda satır başı)
$ Metin Sonu (multiline modunda satır sonu)
[ Karakter sınıfı tanımlama başlangıcı
] Karakter sınıfı tamımlama sonu
| Alternatif ayıracı, örneğin (a|b) hem a ile hem de b ile eşleşebilir
( Desen grubu başlangıcı
) Desen grubu sonu
\ Kaçış karakteri (üstte tanımlanan ( [ $ gibi karkaterlerin desenimizde özel anlamları dışında sadece karakter olarak kullanılmasında yardımcı olur)

 

Ön Tanımlı Karakter Sınıfları
\w Alfanumerik bir karakteri temsil eder [a-z0-9_]
\W Alfanumerik karakterler dışında kalan bir karakteri temsil eder [^a-z0-9_]
\s 1 birim boşluğu temsil eder (boşluk, tab,satır sonu)
\d Numerik bir karakteri temsil eder [0-9]
\D Numerik olmayan bir karakteri temsil eder [^0-9]
. Herhangi bir karakterin yerine geçebilir

 

Niceleyiciler
x* Sıfır ya da daha fazla x
x+ Bir ya da daha fazla x
x? Sıfır ya da bir tane x
x{n} N tame x
x{n,} En az n tane x
x{,n} En gazla n tane x

 

Desen Niteleyicileri (Pattern Modifiers)
i Büyük küçük harf duyarliliğini devre dışı bırakır (Ignore case sensitive)
m Multiline modu ^ ve $ satır başı ve satır sonunu temsil eder (bkz: meta karakterler ^$)
s Dotall modu – nokta “.” Set içinde kullanıldığında satır sonunu da temsil eder
x Yorum ve boş satır sonlarını görmezden gelir
e Eval modu .Sadece replace işlemlerinde geçerlidir.

 

Sınır İşaretçileri
\b Kelime sınırı
\B Kelimeler dışında kalan eşleşmeler sınırı
\A Eşleşme başlangıcı
\Z Eşleşme sonu ya da satır sonu
\z Eşleşme sonu
\G Eşleşmedeki başlangıcın indisi

 

Alt Desen Niteleyicileri ve İşaretçiler
(?:) Alt eşleşme olmama şartı Örn : ((?:tufan|baris)yildirim) diğer alt desenlerle eşleşen bir tufan ya da baris bulamadığı taktirde tufanyildirim ya da barisyildirim ile eşleşebilir.
(?=) Kendisinden sonraki eşleşme geçerliye öncesini de eşleştirirtufan(?=baris) hemen ardından baris içeriyorsa tufan ile eşleşir.
(?!) Önceki işaretçinin tersidir kendisinden sonraki eşleşmiyorsa bu eşleşme kabul edilir
(?<=) diğer işaretçilerle aynı işlemleri kendisinden öncekiler için yapar
(?<!) Önceki işaretçinin tersidir
(?(x)) Bu gruptaki ilk işaretçi için alt desen numarası ile işlem yapabilirÖrn : (?(2)tufan|baris)yildirim bu gruptaki 2inci alt grup tufan ya da baris ise burası yildirim ile eşleşebilir.
(?#) Yorum grubudur (?# bu kısım yorumlanmayacaktır açıklama yazabilir.)
(?isim) , (?’isim’) (?Pisim)Bu işaretçiler de grupları adlandırmaya yarar php’nin 5.2.2 sürümünden öncesinde sadece <?P<isim>> çalışır. Regexp standartlarında ilk örnek olan (?isim) geçerlidir.

 Dökümanın PDF versiyonu : Regular Expressions.pdf

© 2012 Tufan Suffusion theme by Sayontan Sinha