Hurriyet

31 Mart 2014 Pazartesi

Oracle Veritabanı: Regular Expressions - Düzenli İfadeler

Regular Expression'lar Nedir?

Regular expression'lar  string ifadeler içerisinde aramak oluşturulan şablonlardır. Bu şekilde kompleks şablonlar oluşturulabilinir.

Örnek:

 select * from apps.fnd_user where regexp_like(user_name,'B');

İçinde B harfi bulunan kullanıcıları görmek için regexp_like fonksiyonunda user_name sütununda B harfini aratabiliriz.

select * from apps.fnd_user where regexp_like(user_name,'B(E|C)');

İçerisinde B harfi olup da bu B harfini E veya C ile takip eden kullanıcıları görmek için 'B(E|C)'  ifadesini kullanırız. Böylece ismi içerisinde BE veya BC olan kullanıcıları görebiliriz.

Veritabanındaki Regexp SQL Fonksiyonları:

Regexp_like: Bir tablonun kolonunda bir karakter dizisi aramak için where ifadesinden sonra kullanılır. Yukarıdaki örnekteki gibi regexp içerisinde şartlar sıralandıktan sonra kullanılır.

Syntax:http://docs.oracle.com/cd/B12037_01/server.101/b10759/conditions018.htm#SQLRF00501

Regexp_replace: Regexp_like gibi çalışan ama karşılaştığı her ifadeyi fonksiyon içerisinde belirtilen başka bir ifadeyle değiştirir.

Syntax:http://docs.oracle.com/cd/B12037_01/server.101/b10759/functions115.htm#SQLRF06302

Regexp_instr:  Aranacak karakter şablonunun nereden itibaren aranmaya başlanacağını gösterir.

Syntax:http://docs.oracle.com/cd/B12037_01/server.101/b10759/functions114.htm#SQLRF06300

Regexp_substr: Substr fonksiyonuyla karşılaşılan kelime dizilerini sütunların içindeki verilerden çıkarabiliriz.

Syntax:http://docs.oracle.com/cd/B12037_01/server.101/b10759/functions116.htm#SQLRF06303

Regular Expression Oluşturan Karakter Şablonları:


Syntax Operatör İsmi Tanımı:
. Nokta Herhangi bir karakter
+ Artı öncesinde gelen ifadeden bir veya birden fazla karşılaşılması
? Soru işareti Sıfır ya da bir kere öncesinde gelen ifadeyle karşılaşılması
* Yıldız Sıfır ya da birden fazla  öncesindeki ifadeyle karşılaşılması
{m} Aralık öncesinde gelen ifadeden m tane karşılaşılması durumu
{m,} Aralık öncesinde gelen ifadeden en az m tanesi ile karşılaşılması durumu
{m,n} Aralık öncesinde gelen ifadeden en az m en fazla n tanesi ile karşılaşılması durumu
[...] Köşeli parantez Parantezler içerisindeki kısımları eşler.
[^...] Köşeli parantez Parantezler içerisindekilerin dışındakileri eşler

Örnekler:

[a.z]: içinde a'dan z'ye kadar olaran bütün karakterler eşlenir.

[^0-9] :içinde sayı olmayanların örneği

Regular Expression'lar Oluşturmak:
Dizilerimizi oluşturmak için ihtiyaçlarımıza göre ifadelerimizi oluştururuz. Örneğin arayacağımız sütunda "abc" dizilerini bulmak istiyorsak "abc"  şeklinde arama yapabiliriz.

Nokta Karakteri:

Nokta karakteri arama dizisi içerisindeki herhangi bir  karakteri ifade eder. Yani  "a.c" ile ifade edilen bir dizi ile "aac","abc","acc" vb bütün diziler aranır. Kısaca a ile başlayıp c ile biten bütün diziler aranır.

+ Karakteri:

+ ile öncesinde gelen ifadeden bir veya birden fazla defa karşılaşılması durumunda o değeri geri döndürür. Örnek olarak "a+" şeklinde arama yaparsak içinde "a","aa","aaa",... gibi bütün örnekleri eşler.


? Karakteri:

? ile bir karakterin hiç olmadığı ya da bir kere karşılaşıldığı durumları ararız.
Örneğin "ab?c"  şeklinde arama yaptığımız aranacak olanlar kelime dizileri "ac" veya "abc"'dir.

* Karakteri:

* bize öncesinde gelen karakterin 0 ya da daha fazla karşılaşılma durumunu gösterir.


Referanslar:

http://psoug.org/reference/regexp.html
http://docs.oracle.com/cd/B12037_01/appdev.101/b10795/adfns_re.htm
http://turkceoracle.com/2011/03/oracle%E2%80%99da-duzenli-ifadeler-regular-expressions.html

Hiç yorum yok:

Yorum Gönder