Ruby İle Regex İfadeler

Ata Günay
Fazla
Published in
4 min readOct 15, 2022

Regex Nedir?

Herhangi bir metni eşleştirmenize, bulmanıza ya da yönetmenize yardımcı olacak desenler yaratmanıza izin veren birçok karakter ve sembollerin bir araya gelmesiyle oluşan metin dizesidir.

NOT: Bu bölümdeki örnekleri uygulamak için https://rubular.com sitesini kullanabilirsiniz.

Regex Oluşturmak

Ruby ile regex oluşturmanın üç yolu vardır.

  1. my_regex = //
  2. my_regex = %r{}
  3. my_regex = Regexp.new “”

Ruby’ de bütün regex ifadeler “Regexp” sınıfının bir üyesidir.

Arama (=~)

Bu metod, oluşturduğumuz regex ifadeleri bir metin içinde aramamızı sağlar.

  • Başarılı Durum: Bulduğu ifadenin başlangıç indexini döner.
  • Başarısız Durum: Nil döner.

NOT: Ruby’ de regex ifadeler büyük/küçük harf duyarlılığına sahiptir. Eğer ifadenizi duyarsız bir hale getirmek istiyorsanız “i” seçeniğini kullanabilirsiniz.

Gizleme (\)

Regex ifadelerde normal, köşeli ve süslü parantezler ile birlikte artı işareti, soru işareti, yıldız ve noktanın da özel anlamları vardır. Eğer regex ifadenizde bu karakterleri aranacak olan karakterlere dahil etmek isterseniz ters bölü kullanmanız gerekmektedir.

Veya (|)

Birden fazla kalıbımız varsa bu ifadeleri veya operatörü ile aratabiliriz.

Örnektende anlaşılacağı üzere Ruby size ilk eşleşen ifadenin başlangıç indexini döndürüyor. İlk örnekte “Fazlayı” ile eşleşmiş ikinci örnekte “Çevir” ile eşleşmiştir.

Kod Parçası Gömme ({my_code})

Oluşturduğumuz değişkenler de regex ifadelerde kullanılabilir.

Aralık Belirtme (x….y)

Örnek: E ile başlasın A ile bitsin. E ile A arasında 2 karakter olsun. Bu karakterler “\n” (new line) dışında herhangi bir şey olabilir.

Herhangi bir şey olabilir dediğimiz karakterlerin tam sayısını bilmiyorsak “+” operatörünü kullanabiliriz.

Aralık Belirtmek ([xyz])

Sadece belirttiğimiz karakterlerden biri ile eşleşmesini istiyorsak bu operatörü kullanabiliriz.

Örnek: a, g veya b karakterlerinden biri ile başlasın arada ne olacağı beni ilgilendirmez ama m, n veya i karakterlerinden biri ile bitsin.

Örnek 2: /[Rr]/uby = Ruby veya ruby ile eşleşir.

NOT: Araya tire (-) koyarak da aralık belirtebiliriz.

  • /[a-z]/ = a’ dan z’ ye tüm küçük harfler.
  • /[A-Z]/ = A’ dan Z’ ye tüm harfler.
  • /[0–5]/ = 0' dan 5' e tüm rakamlar.

NOT 2: ^ ifadesi ile istemediğimiz karakterleri belirtebiliriz.

  • /^[a-z]/ = a’ dan z’ ye tüm küçük harfler dışındaki her şey.
  • /^[A-Z]/ = A’ dan Z’ ye tüm harfler dışındaki her şey.
  • /^[0–5]/ = 0' dan 5' e tüm rakamlar dışındaki her şey.

Eşleşmeyi Öğrenme (match)

Regex ifademizin eşleştiği kalıpları öğrenmek için match metodu kullanılır.

Önemli Regex Belirleyicileri

  • (*) Kendisinden önceki karakterlerden sıfır veya daha fazla olması durumunda eşleşir.
  • (+) Kendisinden önceki karakterlerden bir veya daha fazla olması durumunda eşleşir.
  • (?) Kendisinden önceki karakterlerden sıfır veya bir defa olması durumunda eşleşir.
  • (()) Eşleşmeleri gruplara ayırır.

Örnek Uygulama

Bir kod parçasındaki HTML etiketlerini bulmaya çalışalım. Bildiğiniz gibi html etiketleri <etiket>İçerik</etiket> şeklinde yazılır. Örnek vermek gerekirse:

  • <a> Hello World </a>
  • <a id = “my_title”> Hello World </a>
  1. İlk olarak regex ifademizin üç parçadan olduğunu belirtiyoruz.
  • /()()()/

2. Daha sonra html etiketlerini yerleştiriyoruz. Burada dikkat ederseniz regex ifademizin üçüncü kısmında bir gizleme (\) operatörü kullandık. Bunun sebebi “/” karakterini bir regex ifadenin başlangıç ve bitiş sınırlarını belirtirken kullanmamızdır.

  • /(<>)()(<\/>)/

3. Açılış etiketimizde herhangi bir şey bulunabilir fakat kapanış etiketimiz sadece büyük veya küçük harf içermelidir. Örnek olarak:

  • <a font-size: 25px> Hello World </a>

Bu sebeple regex ifademizi şu şekilde güncelliyoruz:

  • /(<.+>)(.+)(<\/[A-Za-z]+>)/

(+.) karakterlerinin herhangi bir karakterden bir veya daha fazla olursa eşleşme sağlayacağını biliyorduk. Son etikette ise sadece büyük ve küçük tüm harfler ile eşleşme gerçekleştirmesini belirttik.

Sub ve Gsub Metodları

Bazen metinlerde bulduğumuz eşleşmeleri başka bir metinle değiştirmek isteriz.

  • sub: bulduğu ilk eşleşmeyi değiştirir
  • gsub: tüm eşleşmeleri değiştirir.

--

--