Regular Expressions(Regex) Nedir? Nasıl Kullanılır?

Regular Expressions(düzenli ifadeler; kısacası regex ya da regexp) yazılımcıların kullandığı fazlasıyla önemli bir o kadarda güçlü, yaygın bir yapıdır. Bu yapıyı neredeyse bütün modern programlama dillerinde kullanabilirsiniz. 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. Örnek olarak şemada 24 saatlik zaman formatının yol haritası var. Bu yol haritasının regexteki yazımı ise;

/^([01]?[0-9]|2[0-3]):[0-5][0-9]$/

Aşağıda Regex’in mantığını daha iyi anlamamız bir komutun görsel hali mevcuttur. Sizde istediğiniz bir komutun böyle harita şeklinde görünmesini isterseniz. https://regexper.com/#%5Cn sitesine yazarak görebilirsiniz.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?

Neden Regex Öğrenmeliyiz?

  • Tekrar tekrar aynı şeyleri yazmamak kısacası tekrara düşmemek için.
  • Topluca değiştirmek istediğimiz dizi ya da dosya adları için
  • Karmaşık bir veriyi büyük bir alanda daha hızlı bulmak için.
  • Kullanılan platforma istenilen diziyi bulmak ya da düzeltmek için.
  • Veri tabanında istenilen veriyi bulmak için.
  • Kullanıcının giriş yapıp yapmadığını kontrol etmek için.
  • Verilerin amacına uygun hizmet etmesi ve kodların anlaşıla bilirliği için.
  • Daha kolay, hızlı ve düzenli kod yazmamız için.

Regex Nasıl Çalışır?

İşlemi başlatmak için önce aranan dize regexin özel karakterlerinden oluşan bir yapıya atanır. Bu işlemin ardından bu dizinin eşleştiği yapı ile geri döner. Bu işlem 2 farklı amaç için yapılır. İstenilen yapıyı bulmak (Search) ya da yer değişikliği yapmak (Replace).

Regex Meta Karakterler(Escaped Characters)

Aşağıdaki karakterlerin işlevlerini regex101.com sitesini kullanarak deneyebilirsiniz. Birden fazla karakteri kullanarak kendi isteğinize göre şekillendirebilirsiniz.

[abc]

Parantezin içine yazılan a,b ve c harfleriyle eşleşir buraya istediğiniz harfi yazabilirsiniz.(Sayı da yazabilirsiniz)

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
[^abc]

Parantezin içinde hangi harfler ya da sayılar yazıldıysa onun haricindeki harflerle ya da sayılarla eşleşir.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
[a-z]

Parantezin içindeki karakterlerin dâhil olduğu ve arasındaki tüm karakterleri alır.(Burada a dan z ye kadar olan harfleri alır. Resimdeki göründüğü gibi büyük harfleri ve Türkçe karakterleri almaz)

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
[a-zA-Z]

Küçük a dan büyük A ya kadar olan Türkçe karakter harici bütün karakterleri almamızı sağlar.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“.”

Newline dışındaki bütün karakterleri (boşluklar dâhil) almamızı sağlar.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?

“\s”

Boşlukları almamızı sağlar.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
”\S”

Büyük S bize bütün karakterleri verir sadece boşluk ne bırakılan satırları vermez.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“\d”

Bize bütün rakamları verir. [0-9]

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“\D”

Rakamlar dışındaki bütün karakterleri verir. (boşluk, Tab dâhil)

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“\w”

Bütün rakamları ve harfleri verir [a-zA-Z0-9_] ile aynı anlama gelir tek fark \w Türkçe karakterleri de alıyor [a-zA-Z0-9_] Türkçe karakterleri almıyor. Resimde göründüğü gibi rakam ve sayı dışındaki karakterleri almaz.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“\W”

Harfler ve sayılar hariç onun dışındaki bütün karakterleri veriyor.(“\w” tam tersi)

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“\v”

Yeni satırları ve dikey sekmeleri verir. Unicode ile çalışıyor. CMD/CTRL +ENTER kullanarak bazı kelime işlemcilerinde dikey sekmeler ekleyebilirsiniz. Çok fazla kullanılan bir komut değildir.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“\n”

Geri dönüş olarak adlandırılır, önceki parantez kümesinde çekilen metnin tekrarıyla eşleşir. Belirsizliği azaltmak için ‘\ gn’ veya n bir sayıysa ‘\g{n}’ kullanabilirsiniz.

“\ddd”

Sekiz bit olan karakterleri atanan sekizlik değerlerle eşitler ve bize verir. Tablodan bakıp almak istediğiniz karakterin kodunu ddd yerine yazın.(Buradaki Octal Character Table dan yardım alabilirsiniz) https://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=oct

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?

(056 noktanın kodu Octal Character Table a göre)

“[\b]”

Geri silme kontrol karakteriyle çalışır.(backspace)

“ \”

Bu karakter bir meta karakterin ya da sınırlayıcının gerçek değerini almamızı sağlıyor.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“(a|b)”

Alt ifadelerin a veya b kısmı ile eşleşir ve bize orayı gösterir. Kullanımı çok yaygın değildir.

“(?…)”

Bu yapı (…) ya çok benzer fakat onun yaptığı gibi herhangi bir şeyi bize vermez. Aynı görevde kullanılmaz.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“(?#…)”

Bu grupta görünen herhangi bir metin regex’te yok sayılabilir. Başka bir seçenek de x bayrağının #comments’a izin vermesini sağlamak. Bu bayrak aynı zamanda regex’in boşlukları görmezden gelmesine neden olur.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“(?P<name>…)”

Bu komut ile yakalama grubuna numara yerine verilen adı kullanarak yakalayabiliriz. Alternatif metotlar şunlardır ; (?<name>…) ve (?’name’…) PCRE kullanırken bu metotları da kullanabilirsiniz.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“(?imsxXU)”

Bu ifade, ifadenin içindeki regex bayraklarının ayarlanmasını sağlar. Bayrakları eksi işaret kullanarakta ayarlayabilirsiniz.(?-i)

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
Regular Expressions(Regex) Nedir? Nasıl Kullanılır?

Burdaki Komutlardan da ayarlanabiliyor ama pek verimli değildir.

“(?(1)yes|no)”

Bu komut sayesinde yakalama gurubunun ilk soldakiyle eşleşmeye çalışır. Eğer soldakiyle eşleşmezse sağdakiyle eşleşir. Genellikle kullanılır. (True and False)

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“(?P=name)”

Bu komut python’a özel bir komuttur. Önceden belirtilmiş bir yakalama grubuyla eşleşen metni yakalar. Diğer komutlarla birleştirildiğinde oldukça kullanışlı bir hal alabilir. Aşağıdaki resimde diğer komutlarla birleşmiş hali mevcut.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“(?=. . . )”

Komut böyle olsa da kullanımı genellikle(. . .(?=. . .) ) şeklindedir. Bu komut verilen alt yolun karakter kullanmadan eşleştirilebileceğini söyler. Örnek kullanımı (mal(?=ware)) şeklinde olabilir.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“(?! . . .)”

İfadedeki geçerli pozisyondan başlayarak verilen desenin eşleşmemesini sağlar. Karakter tüketmez. (?=. . .) komutunun tersi de diyebiliriz.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“(?<=. . .)”

Komut böyle olsa da genellikle kullanımı (?<=mal)ware şeklindedir. Bu metot ile belirtilen kalıbın, ifadedeki geçerli konumda biten yeri verir. Desen sabit bir genişlikte olmalıdır. Herhangi bir karakter tüketmez.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“(?<! . . .)”

Belirtilen kalıbın, ifadedeki geçerli konumda biten eşleşmesini sağlar. Desen sabit bir genişliğe sahip olmalıdır. Burada da genel kullanımı (?<!not)mac gibi kullanılabilir.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“a?”

A yerine yazdığınız herhangi bir karakterle eşleşir ya da eşleşmez.

“a+”

A yerine yazdığımız herhangi bir karakterle bir veya birden fazla kez yazılmış ardışık karakterlerle eşleşir.

”a{3}”

Bu kalıbın anlatmak istediği şey. Parantezin solunda kalan karakterden ardışık olarak kaç tane olduğunu söyler. Parantezin içindeki sayı bize ardışık kaç tane karakterin olduğunu söyler.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“a{3, }”

Bu kalıp aslında 4.29’daki kalıba benziyor fakat burada parantez işine yazdığınız sayı en az o kadar olduğunu işaret ediyor. Burada örnek olarak 3 verilmiş 3 ve 3’ten fazla ardışık yazılı ‘a’ları almamızı sağlar.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?

(Kalıbın başında ve sonunda kullanılan karakterler buradaki kalıp ile bir alakası yoktur. Sistemde böyle algılanıyor.)

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?

Siz virgülden sonrasını da doldurursanız bu durumda doldurduğunuz sayılar dâhil olmak üzere (3,6) o kadar kez tekrar etmiş olan karakteri döndürür.

“ ^ “

Her hangi bir karakter tüketmeden dizenin başlangıcını eşleştirir. Çok satırlı metinlerde ya da yapılarda, yeni satır karakterlerinden sonra eşleşir.(\A) komutuyla aynı görevi yapar.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“ $ “

Her hangi bir karakter tüketmeden dizenin sonunu eşleştirir. Çok satırlı yapılarda, yeni satır karakterlerinden sonra eşleşir. Kısacası dizenin sonunu verir.(\Z) komutuyla aynı görevi yapar.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
“g“

Motora, ilk eşleşme bulunduktan sonra durmamasını, daha fazla eşleşme bulmayana kadar devam etmesini söyler.

“m”

Bu komut aslında iki komutun birleşimi gibidir. Satır başını gösteren(^) ile satır sonunu gösteren ($) komutların birleşimidir. Sırayla her satırın başından sonuna kadar eşleşmesini sağlar. Bütün satırı almamızı sağlar

“\0“

Regex ‘ in tam eşleşme sonucunu içeren bir dize döndürür.

“$1”

Bu komut ilk yakalama grubundaki içeriğe sahip bir dize döndürür. Bu durumda 1 sayısı, geçerli bir yakalama grubuna karşılık geldiği sürece herhangi bir sayı olabilir.

“\t”

Bu komut bir tane sekme karakteri ekler.

“\x20 “

Standart sözdizimini kullanarak değiştirme dizgisine herhangi bir karakter eklemek için onaltılık öğeleri kullanabilirsiniz.

Python’da REGEX Nasıl Çalışır?

Regex komutları python da genel olarak “re” modülün de bulunur. Bu kütüphaneden komutları almak için “import re” diyerek ulaşabilirsiniz. Re modülü bize birkaç tanede fonksiyon sunar bu fonksiyonların amacı istediğimiz dizeyi ya da karakteri aramak. Ardından buna erişmek. Re modülündeki fonksiyonlara örnek olarak;

  • Findall()
  • Search()
  • Split()
  • Sub()
Findall() İşlevi

Findall() fonksiyon tüm eşleşmelerini içeren bir liste döndürür.

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?

Liste, eşleşmeleri bulundukları sıraya göre içerir. Eşleşme bulunmazsa boş bir liste döndürülür.

Search() İşlevi

Search() İşlevi, eşleşmek için bir dize arar eğer eşleşirse eşleştiği nesneyi döner. Birden fazla eşleşme varsa, eşleşmenin yalnızca ilk bulduğunu döndürür.
Dizedeki ilk boşluğu arayan örnek kod;

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?

Eşleşme bulunmazsa, değer None döndürür yani boş döner.

Split() İşlevi

Split() fonksiyon dizisi her eşleşmesinde bölünmüş durumda bir liste döndürür. Bu liste sayesinde yazma ya da yazdırma işlemlerimizi daha kolay yapabiliriz.
Örnek her boşluk karakterinde bölme yapmak için kod örneği:

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
Maxsplit() İşlevi

Maxsplit fonksiyonunu kullanarak oluşan olay sayısını kontrol edebilirsiniz.
İlk istenilen duruma göre ayıran kod örneği:

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
Sub() İşlevi

Sub() fonksiyonu eşleşen yerine istediğiniz karakteri ya da metini yazdırmanızı sağlar. Bir nevi replace yapar da diyebiliriz.
Her boşluk karakterini 9 ile değiştiren kod örneği:

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?
Eşleşme Nesnesi

Eşleşme nesnesi, arama ve sonuç hakkında bizlere bilgi verir. Bazen eşleşen bir sonuç olmadığında bunun açıklamasını da yapar.( None yani eşleşme yoksa eşleşme nesnesi yerine değer döndürür.)
Örnek olarak:

Regular Expressions(Regex) Nedir? Nasıl Kullanılır?

Blog postu ile ilgili bir sorunuz varsa bizimle iletişime geçebilirsiniz.

Regex Örnekleri

Tarih Formatı Örneği

/^(0?[1-9]|[12][0-9]|3[01])([ \/\-])(0?[1-9]|1[012])\2([0-9][0-9][0-9][0-9])(([ -])([0-1]?[0-9]|2[0-3]):[0-5]?[0-9]:[0-5]?[0-9])?$/

Bu komut ile (dd/mm/yyyy) şeklinde bir tarih döndürebilirsiniz.

Saatlik Zaman Formatı

/^([01]?[0-9]|2[0-3]):[0-5][0-9]$/

Bu komut ile saat şeklinde verilen yapılara çok kolayca erişebilir ve döndürebilirsiniz.

IP Adres Formatı

^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$

Bu komut ile (123.123.123.123) şeklindeki 254 e kadar olan IP adreslerini eşleştirip döndürebilirsiniz.

Domain Adresi Formatı

^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$

Bu komut ile (xxxxxxxx.com) şeklindeki domain namelerle eşleşmemizi ve döndürmemizi sağlıyor.

Blog postu ile ilgili bir sorunuz varsa bizimle iletişime geçebilirsiniz.

Berkecan DİNÇER

Size nasıl yardımcı olalım?

İhtiyacınız olan her an Prisma danışmanları yanı başınızda. Bizimle 7/24 iletişime geçebilirsiniz.


Sızma testi hizmetlerimizi incelediniz mi?