REGEX – Alt İfadeler

Perşembe, 17 Eyl 2009 yorum ekle yorumlara git
X

Okuduğunuz yazı, Düzenli İfadeler (Regular Expressions) adlı yazıdizisinin parçasıdır. Eğer giriş yazısını hala okumadıysanız şimdi okuyun, aksi takdirde "Ben neresiyim? Burası kim?" gibi manası bol fakat anlaşılması güç cümleler kurabilirsiniz.

Bu yazı dizisine ait tüm yazılar

En çok kullanılan metakarakterlerden diğeri; | VEYA anlamına gelir. Küçük L harfiyle karıştırmayın :) Klavyelerde genelde Alt Gr + Büyük-Küçük işareti olan tuşa tıklayarak yazdığımız karakter bu. Birden fazla düzenli ifadeyi birleştirip tek bir düzenli ifade oluşturmamıza yarıyor. Bu yeni oluşturduğumuz ifade içerisindeki alt ifadelerden herhangi birini karşılıyorsa sonucu listeler.

Makin[ae] örneğimizi hatırlarsınız. Bu örneği şu şekilde yazmak mümkün;Makina|Makine Hatta abartırsak; Makin(a|e) Tabi gerek yok bunlara, ama örnek vermek amacıyla yazıyorum, yoksa bu örnekte bizim kullanmamız gereken düzenli ifade Makin[ae] dir.

Makin(a|e) örneğinde neden parantez kullandığımızı açıklayalım. Eğer parantez kullanmasak bilgisayar bizim Makina ve e metinlerini bulmak istediğimizi sanardı. O yüzden parantez içerisinde yazıyoruz. Çünkü yazıdaki tüm e harflerini listelemek istemeyiz. En azından şimdilik.

Birkaç tane daha örnek verelim;

Yazı içerisindeki tüm 6. Yarışmacı sözcük gruplarını listeleyelim. Eğer yazıyı hazırlayan kişinin her seferinde 6. Yarışmacı dediğinden emin olabilirsek direk 6. Yarışmacı diye arayabiliriz. Fakat biz şüpheci insanlarız, emin olamıyoruz. Belki adam 6. Yarışmacı değilde Altıncı Yarışmacı yazmıştır? Biz hepsini bulmak istiyoruz. Hazırlamamız gereken düzenli ifade;

(Altıncı|6\.)•Yarışmacı
*- Verdiğim örneklerde rahat sayılabilmesi açısından boşluk yerine yazdığımı unutmayın.

*- 6 dan sonra gelen \ ile nokta karakterini escape ettik. Nokta metakarakterini unutmayın.

İkiden fazla alt ifade kullanabilir miyiz? Tabi ki. Hemen kullanalım. REGEX‘in büyük-küçük harf duyarlı olduğunu hatırlarsınız umarım. Yanı biraz yukardaki regex Altıncı Yarışmacı sözcük gruplarını listelerken altıncı yarışmacı sözcük grubunu listelemez. Biz daha büyük-küçük duyarsız aratmayı öğrenmediğimiz için değişik yollardan çözüm bulmalıyız. Mesela;

(Altıncı|altıncı|6\.)•Yarışmacı

İşte böyle. “Yarışmacı kelimesine niye bişi yapmadık? Belki onu da küçük harfle yazmıştır?” diye sorduğunuzu duyar gibiyim, onu da siz yapın canım. Artık gerekli donanıma sahipsiniz.

Ama ben desenimizi bir adım daha ilerletmek istiyorum. Alttaki deseni anlamaya çalışın. Ve şimdilik hoşçakalın!

([Aa]ltıncı|6\.)•Yarışmacı


Paylaş:
  • Facebook
  • FriendFeed
  • Twitter
  • del.icio.us
  • Digg
  • StumbleUpon
  • Technorati
  • LinkedIn
  • MySpace
  • BlinkList
  • Reddit
  • RSS
  • email
  • PDF

Benzer Yazılar (bunları bilgisayar seçiyor);

Categories: Programlama, Regular Expressions 3.996 Gösterim
  1. yüksel balon
    Çarşamba, 09 Şub 2011 zamanında 09:18 | #1

    gayet güzel. teşekkürler…
    ancak keşke bu yazı dizisine biraz daha devam etseydiniz. hevesli hevesli okuyorduk ne güzel

  2. Özgür Özer
    Cumartesi, 30 Nis 2011 zamanında 08:14 | #2

    orta derece bi php bilgim var. regex konusunada yeni yeni giriş yapıyorum ve anlatımınız gerçekten çok hoşuma gitti. bi solukta regex’le ilgili tüm yazı dizilerinizi okudum ve anlamamda çok kolay oldu. yazılarınızın devamını bekliyorum..

  3. phonon
    Pazar, 12 Haz 2011 zamanında 18:53 | #3

    En son ifadenin
    ([Aa]|ltıncı|6\.)•Yarışmacı bu şekilde değilde
    ([Aa]ltıncı|6\.)•Yarışmacı böyle olması gerekmiyor mu?

    Regex konusundaki bütün yazıları okudum. Güzel bir seriydi. Teşekkur ederim.

  4. Pazartesi, 13 Haz 2011 zamanında 00:00 | #4

    @phonon
    Evet, haklısınız. Bir hata olmuş, hemen düzeltiyorum.

    Yorumlarınız için teşekkürler.

  5. Cihan Aksu
    Cuma, 07 Eki 2011 zamanında 17:47 | #5

    RegEx dizisine ben de wikipedia’dan ulaştım. Gerçekten de verimli, sade ve güzel bir anlatım. Örnekleri bulmakta zorlanmanızı çok iyi anlıyorum :) Ayrıca yazı dizisi plugini de gayet şık olmuş, sayesinde ben kimim, neredeyim demedim. Teşekkürler.

  1. şimdilik geri bağlantı yok