Berkay Beyaz

Berkay Beyaz


August 2016
M T W T F S S
    Sep »
1234567
891011121314
15161718192021
22232425262728
293031  

Categories


SRL (Simple Regex Language) Kullanimi

berkaybeyazberkaybeyaz

Merhabalar bugun cok fazla deginilmeyen ama bir o kadar da cok ihtiyac duyulan ama kafa karisikligi yaratan bir olaya degenecegim konumuz “REGEX” yani Regular Expression cogumuza ve ben dahil olmak uzere karmasik gelir bazen ters slash’i (/) unutuyoruz bazen de arti isaretini unutuyoruz SRL bize bu isi kolaylastiriyor bu sayede hem hiz kazaniyoruz hemde regex isleminde bir sikinti cikarmadan yapiyoruz.

s_20160830_194519

Srl’de case insensitive vardir yani
literally "berkay beyaz"
ile

LITERALLY "berkay beyaz"

bu iki kod arasinda bir fark yoktur esittir sadece tirnak icindeki degerler uppercase veya lowercase olursa bir sorun yaratir, ve query icinde comment olarak hic birsey kullanamiyoruz ama ileriki surumlerde gelebilirmis ve bizim sub-query kurabilmemize imkan sagliyor. On tanitimi yaptiysam detaylarina gecebilirim.

Bolum 1: Characters (Karakterler)

Bu kategori altinda kullanacagimiz belirli basli kelimeler vardir mesela literally, one of, any character gibi ilk olarak literally‘den basliyalim

  1. literally

Literally’nin turkce karsiligi harfi harfine yani bir nevi regexde bir bolumu bulmaya calistigimiz zaman bunu kullanacagiz eger biz “Ahmet evde mi ?” cumlesindeki Ahmet’i bulmak istiyorsak literally "Ahmet" diyerek bulabiliriz.
bknz: demo

  1. one of

    One of ile literally’nin tek farki stringler yani nasil one of literally’ye gore biraz daha sense yani literally sadece kelimeler ile calisir iken one of #,$,%,^,& gibi stringler ile calisabilir aralarindaki tek fark budur ama literally de yukaridaki stringler ile calisir ama one of biraz daha sense iste tam farki bu.
    bknz: demo

  2. letter

Bildiginiz uzere letter’in kelime anlami vardir srl deki kullanimi ise alfabedeki bir harften diger belirledigimiz harfi baz alarak arasinda yada arasinda degil gibi bir islem yapiyor eger kelimeyi bilmiyorsaniz ama kelimedeki harfi biliyorsaniz bu islem tam size gore kullanimi ise letter from a to z bu sekil bir kullanimi vardir.
Eger srl’de letter from z to a‘yi kullanirsaniz size invalid olarak bir mesaj donecektir yani harfin kucukten buyuge dogru olmasi lazim letter from a to a yaparsaniz yine basarili olursunuz
bknz: demo-1, demo-2

  1. uppercase letter

Yine adindanda anliyacaginiz uzere letter daki kullaminin aynisi ama sadece buyuk harf kullanilmis hali
bknz: demo

  1. any character

Any character’in olayi ise letter a benziyor ama A’dan Z’ye 0’dan 9’a ve ‘_’ isaretini kapsiyor eger &,%,^,* gibi harfler girerseniz hata alirsiniz eger bir kullanici adini dogrulamak isterseniz any character kullanmaniz gerecektir.
bknz: demo

  1. no character

No character de any character in tam tersi denilebilir burada sadece !@#$%^&()+* gibi karakterleri kullanabiliyoruz.
bknz: demo

  1. digit

Digit’ise letter’in sayisal hali bundada digit from 1 to 3 yapabiliriz letterda verdigim dipnot yine buradada gecerlidir. Eger vereceginiz rakam tek basamakli ise hic birsey kullanmaniza gerek yok ama 2 basamakli veya daha fazla ise yaninda exactly 2 times ve exactly 3 times kullanmaniz lazim cunki her bir rakami parse ediyor ve ona gore islem yapiyor.
bknz: demo-1, demo-2

  1. anything

Yine adindanda anlasilabildigi uzere her karakteri kabul ediyor ama yinede bir uyari yapalim gerekirse kullanin bunu sakin unutmayin 😀
bknz: demo

  1. new line

Bu ozelligimiz ise yeni bir satir ile eslestiginde veriyor ve bunu anca php ile query builder yazdigimizda gosterebilecegiz 🙁

  1. whitespace ve no whitespace

Bu basliktaki arkadaslarda arada bosluk var mi yok mu onu kontrol etmek icin varlar.
bknz: demo-whitespace, demo-no-whitespace

Bolum 2: Quantifiers (Niceleyiciler)

Niceleyiciler karakterler gibi kullanilmaz yani kendi baslarina bir anlam ifade etmezler bir degere karaktere ihtiyaclari vardir yani kisaca bir karakter ile bir deger olcuyor isek mesela bir letter veya digit olsun bunlarin kac basamakli olacagina uzunlugunu ve ne ile baslayip ne ile bitecegine bunlarla karar veriyoruz hemen gecelim isterseniz.
dipnot: bir karakter belirtir iken birden fazla quantifiers kullanamazsiniz.

  1. exactly x times

Exactly x times ile kac basamakli olacagina karar verirsiniz mesela digit exactly 3 times dedik ve biz 3 basamakli bir sayi istiyoruz 2 basamakli bir rakam verilir ise bize direk hata dondurur, eger 3 veya daha fazla basamak girilir ise bir sorun cikmaz ve normal olarak isleme devam edilir.Ayrica eger tek basamakli veya 2 basamakli bir deger istiyorsaniz once veya twice olarak kisa yoldan yapabilirsiniz yani exactly x times yazmaya gerek kalmadan digit once veya letter twice diyerecek exactly 2 times in islevini yerine getirmis olursunuz.
bknz: demo

  1. optional

Optional ile aldigimiz karakterin olsada olur olmasada olur durumuna bakiyoruz,
digit optional,letter twice yandaki kodda sayi opsiyonel olsun ama 2 harf istiyoruz dedik.
bknz: demo

  1. once/never or more

Bu biraz karmasik olabilir digerlerine eger simdi once or more yani bir tane yada fazlasi bunun aciklamasi letter once or more dersek bizim inputa sadece bir harf veya daha fazlasini girmemiz lazim uzunlugu onemli degil eger biz o alani bos birakirsak hata vericektir diger ozellik iseletter never or more buradada hic yada fazlasi bununda aciklamasi biz o inputu bos biraksakta harfte girsekte calisicaktir.
bknz: demo-once, demo-never

  1. at least x times

At least x times bize sonsuz genisligi veriyor nasilmi biz eger minimum karakter istiyorsak ve sonsuza kadar gitsin onemi yok ise at least x times i kullanabiliriz digit at least 3 times der isek 3 basamak ve yukarsini girebiliriz.
bknz: demo

Bolum 3: Groups (Gruplar)

Gruplar regex’in en guclu toollarindandir. Esleslemeleri yakalayabilirsiniz, yada onlari goruntuleyebilirsiniz ve gruplar sub-queries yapmamizada imkan sagliyor.

  1. capture

Capture kullanimi oldukca kolaydir capture (yapacagimiz islem) as "degisken adimiz" phpdeki fonksiyon gibi yani fonksiyon ismi veriyoruz sonra islemi yapiyoruz ve icinde sub queries olustura biliyoruz ve verdigimiz degisken ile bizim log almamiza imkan veriyor.
bknz: demo

  1. any of

Eger hangi sarti saglayacagindan kesin olarak emin degil iseniz any of kullanabilirsiniz, burada coklu olarak gruplandira bilirsiniz ornek olarak
capture (any of (literally "deneme" , (digit once or more)) suanlik query’miz bu durumda eger biz digit’in parantezlerini kaldirir isek bize kesinlikle hata donucektir
dipnot: either of ile any of bir birlerinin aynisidir.
bknz: demo

  1. until

Until’in kullanimi oldukca basittir yani turkce karsiligi suraya kadar oluyor
capture (anything once or more) until "m" bu kodda demek istedigimiz herseyi yakala ama ‘m’ harfine kadar dedik bizim girecegimiz input’a “bu bir deneme” yazsaydik eger bize dondurecegi cikti “bu bir dene” olucakti tabi until sadece harflerlede kullanilmiyor rakamlarlada kullanila biliyor.
bknz: demo

Bolum 4: Lookarounds

Lookaroundslar ifade kosullarini rahatca querymize eklememize yardimci oluyorlar genel olaral if-statementlerini kullanirlar biraz karmasik gelebilir ilkte ama korkucak birseyleri yoktur bunlarinda 😀

  1. if followed by / if not followed by

Bu baslik altindada if statemen’inin biraz degisik halini gorecegiz hemen su koddan ilerliyelim capture (digit) if followed by (anything never or more, digit) burada ne dedik rakamlari yakalasin eger herhangi birsey yoksa veya fazlasi varsa rakam versin dedik bizim inputumuz ” sayi 1 aslan 2 berkay 3″ olur ise bize donucek cikti 1 2 3 dur bunun tam tersi olayi ise if not followed by‘i su kod ile aciklayacagim capture (letter) if not followed by (anything, digit) burada diyorki harfleri yakala eger hic bir sey tarafindan veya rakam tarafindan takip edilmiyorsa bize rakamlari versin. Bu kodun turkce aciklamasi bu oluyor.
bknz: demo-positive, demo-negative

Bolum 5: Flags (Bayraklar)

Flagler bizim isimize burada case insensitive yapmakta veya line gibi konularda yariyor

  1. case insensitive

Case insensitive’de case eslesmeleri onemlidir case insensitive kullanarak onemsiz hale getirebiliyorz mesela literally "php" ile literally "PHP" normalde farkli seylerdir ama literally "php" case insensitive yaparak php ve PHP degerleri ayni olmus oluyor.
bknz: demo

  1. multi line

Multi line i uzun queryler yazar iken kullanabilirsiniz ama basinda ve sonunda begin with veya must end kullanmalisiniz.Hem okunulabilirlik acisindan rahatlik saglarsiniz

  1. all lazy

All lazy adindan da anliyacaginiz uzere diyelimki bir stringdeki butun rakamlari almak istiyorsunuz bunu uzun uzun if followed by yazmaktansa capture (digit once or more) all lazy diyerek hepsini yakalaya biliriz
bknz: demo

Bolum 6: Anchors/Others

  1. begin with/start with

Begin with ve start with‘in arasinda bir fark yoktur ayni ozelliklere sahiplerdir nasil kullanmak ister iseniz adindan anlasildigi gibi gelen degerin ne ile basliyacaginin sartini vermek icin kullanilir bunu starts with literally "eslesme" gibi bir kodumuz var ve gelen degerin eslesme ile baslamasi lazim eger oyle ise islem devam eder
bknz: demo

  1. must end

Must end ise gelen degerin ne ile bitmesini istiyor bizden yani kisaca literally "gmail.com" must end yani gmail.com ile bitmesini istedik yani biz deneme@gmail.com yazarsak stringe bakiyor en sonundami bu evet sonunda ona gore islem yapiyor
bknz: demo

Cok uzun bir yazi oldu diger yazida gorusmek uzere diger yazim ise PHP ile SRL nasil kullanilir olucaktir geri donutlerinizi bekliyorum 😀

Kaynakca :