İçeriğe geç

NSRegularExpression kullanımı

İOS

Merhabalar bu yazımda Programlama dünyasında string ayıklama betik dili olarak kullanılan regular expression’u İOS üzerinde nasıl kullanırız buna örnek vereceğim.

Bunun için iOS‘da bulunan NSRegularExpression sınıfını kullanacağız. Peki nedir bu kısaltışmış isim olarak REGEX.

Regular expression, birçok programlama dilinde kullanılabilen ve sayısal ve dizgisel içeriklerde belirli kurallara uyan bölümleri bulan ifadelerdir. “Düzenli ifade” ile Türkçe karşılığını kullananlar olsa da bazı sözlüklerde karşılığı “kurallı ifadeler” dir.

PHP‘de sıklıkla kullandığımız preg_match,preg_replace fonksiyonlarını kendimize göre İOS içinde yazabiliriz. Bundan bir önceki yazımda NSDataDetector‘den bahsetmiştim burda kullanımlar hazır şekilde sunulmakta ancak biz regex ile istediğimiz string içi aramayı düzenlemeyi yapabiliriz.

Regex kullanımda temel olan bazı noktalara örnek olarak.

 

Temel “Regular Expression” Yazımı
. herhangi bir karakter Nokta (.) herhangi bir karakteri(sayısal, dizgisel, özel, görünmez) ifade etmek için kullanılır. Örnekler:“do.” yazımı; dog”“dot”“doe”, hecelerinden herhangi birisine uygundur.
“d..r” yazımı; “door” ve “deer” ifadelerine uygundur.
* önceki karakterin sıfır veya çok sayıda tekrar edebileceğini ifade eder Yıldız (*) simgesi kendisinden önce gelen karakterin (veya grubun) sıfır kez (hiç) veya çok sayıda tekrar edebileceğini gösterir. Örnekler:“do.*” yazımı; “dog”“done”“doppleganger”, ifadelerini kapsamaktadır.

“to*” yazımı; “to” ve “too” ifadelerine uygundur.

“fre*..” yazımı;  “frat”“free”“from” ifadelerine uygundur.

+ önceki karakterin en az bir veya çok sayıda tekrar edebileceğini ifade eder Artı (+) simgesi * dan farklı olarak önceki karakter veya grubun en az bir defa bulunması koşulu getirir. Birden çok kez de tekrar edebilir. Örnekler:“fre+..” yazımı;  “freak”“freeze”“fresh” ifadelerine uygundur.
? önceki karakterin sıfır veya bir kez bulunabileceğini ifade eder Soru işareti (?) kendisinden önceki karakter veya grubun olmayabileceğini veya bir kez tekrar edebileceğini gösterir. Örnekler:“ton?e” yazımı; “toe” ve “tone” ifadelerine uygundur.
( )
gruplama Parantezler ( ) kalıpları (patterns) gruplamak için kullanılır. Burada amaç grup şeklinde işleme sokabilmektir. Örnekler:(dog|cat) yazımı; “dog” ve “cat” ifadelerine uygundur.
[] gruptaki herhangi bir karakter Köşeli parantez ([]) içinde barındırdığı kalıba göre bir karakter yerine geçer. Örnekler:“ta[pb]” yazımı;  “tap” ve “tab” ifadelerine uygundur.

“r[aeiou]t” yazımı; “rat”“ret”“rot”“rut” ifadelerine uygundur.

“r[aeiou]+t” yazımı; “rat” (plus all of the above)“riot”“root”, … ifadelerine uygundur.

[^] gruptaki herhangi bir karakter hariç (^) Simgesi eğer köşeli parantez ([]) içinde kullanılırsa, bu kendisinden sonraki karakter veya grubun bulunmayacağını ifade eder. Örnekler:“t[^aeiou]+.*s” yazımı;  “thanks”“this”“trappings”, … ifadelerine uygundur.
{min,max} tekrar aralığı Küme parantezi ({}) ile bir önceki karakter veya grubun tekrar edilme miktarı tanımlanır. Eğer tek bir değer yazılırsa; yazılan değer kadar tekrar şarttır. Küme parantezi içine iki değer virgül ile ayrılarak yazılırsa; tekrar, soldaki küçük değerden az ve sağdaki büyük değerden fazla olamaz. Örnekler:“[a-z]{3}” Bu örnekte küçük “a” harfi 3 defa tekrarlanmak zorundadır. Aksi taktirde koşula uymayacaktır.

“[0-9]{3,}” Bu örnekte ise ikinci değer tanımlanmadığından dolayı, en az 3 kez tekrarlanmalıdır. 3 ten çok tekrar kabul edilebilir.

“[A-Z]{2,5}” Bu örnek ise alt ve üst limitlerin tanımlanmasıyla, en az 2 en fazla 5 kez tekrar edebilir.

 

Karakter Etiketleri Yer Belirteçleri
\d Herhangi bir rakam [0-9] ^ Satırbaşı (eğer m düzenleyicisi varsa)
\D Rakam olmayan herhangi bir simge [^0-9] $ Satır sonu (eğer m düzenleyicisi varsa)
\w Herhangi bir harf, rakam veya alt çizgi (Türkçe harfler hariç) (alfanümerik) [a-zA-Z0-9_] \b Kelime başlangıç simgesi (^ ve $ gibi dedektör)
\W Alfanümerik olmayan [^a-zA-Z0-9_] \B Kelime başlangıcı olmayan durumlar
\s Herhangi bir boşluk karakteri [ \t\n\r\f]
\S Boşluk karakteri olmayan [^ \t\n\r\f]

Yazdığım operator overloading tarzındaki fonksiyonu inceleyip sınıfın kullanımını görebilirsiniz. Ayrıştırma patternleri internette bulunmakta dilin mantığını yapısını öğrenip buna uygun ayrıştırma kontroller yapabilirsiniz.

İlk olarak textin pattern’e uygun olup olmadığını sorgulayan fonksiyona örnek vereyim.

textin içinde aradığımız kelime varsa değiştiren fonksiyonu yazalım.

 

 

Tarih:iOS

Bu yazı yorumlara kapalı.

© 2019 Kenan Atmaca