Özetle bir çok durumda gereksinim duyabileceğiniz (eğer biliyorsanız), bilmiyorsanız iş yapış süreçlerinizi önemli ölçüde etkileyebilecek bir içerikle devam ediyorum: Regex (Regular Expression) Nedir?
Regular Expression
Regular Expression (Regex veya Regexp / Düzenli / Kurallı İfadeler) modern programlama dillerinin neredeyse tamamında yer bulan, aynı söz dizimine1 (syntax) sahip olan, genellikle harflerden oluşan karakterler dizisinin (katar2 / string) belirtilen kurallar çerçevesinde kısa yoldan ve esnek bir biçimde belirlenmesini sağlayan bir yapıdır.
Düzenli İfadelerin Kullanım Amacı
- Yoğun veri yığını içerisinden ihtiyaç duyulan bilginin çekilmesi,
- Kullanıcı tarafından girilen girdinin denetimi,
- Verilerin kullanım amacına uygun biçime sokulması.
Çalışma Yapısı
İşlem aşamasında aranan katara (string) bir kalıp tanımı yapılır (atama). İşlemin ardından bu katarın eşlenikleriyle geri dönmesi beklenir. Bu yapı özel karakterler aracılığıyla sayesinde eşlenik bulma (search) veya yer değiştirme (replace) gibi olaylar hızlı ve etkili bir şekilde gerçekleşir. Eşlenik bulma ve yer değiştirme tanımlamaları için kullanılan özel karakterler ve işlevlerine aşağıda örneklerle değinmeye çalıştım. Öncelikle Visual Studio Code için pratik bir örnekle başlayalım. Herhangi bir dosya açalım ve Ctrl+F (Cmd+F) tuşlarına basarak Bul ve Değiştir alanını görüntüleyelim. Ardından Bul bölümüne şu ifadeyi yapıştıralım: ^.*$
, Değiştir bölümünde ise kullanacağımız ifademiz şöyle "$0",
. Use Regular Expression (.*
) seçeneğini seçip dosyamıza uyguladığımızda tüm satırların tırnak işareti içerisine alındığını görebiliriz. Bu basit örneğin ardından tanımlamalarla devam edelim ve ifadelerin kapsamlarına bakalım.
Regex Özel Karakter Tanımlamaları
Aşağıda özel karakterlerin işlevlerinin anlatımlarına ek olarak örneklerine de yer vereceğim. Bu örneklerin kullanımları3 için regex1014 ve regexr5 siteleri işinizi görecektir.
DigitalOcean sunucu işlemlerinde /root/.digitalocean_password
dokümanında kayıtlı şifrelere erişim için örneğin şu pratik yolu izleyebiliriz.
cat /root/.digitalocean* | grep '.*_mysql_pass'
Meta Karakterler (Escaped Characters)
“.“
Sayfa ya da paragraf sonu dışındaki herhangi bir karakteri temsil eder. Örnek olarak “k.re” ifadesi “küre”, “kare”, “kore”, “kere” ile eşlenecektir.
“$“
Eşlendiği ifadenin sonunu belirtir. Boşluklar ve paragraf başındaki özel nesneler dikkate alınmaz. Örneğin paragraf sonundaki iner$
ifadesini belirlemek bu şekilde mümkün olacaktır. Bu şekilde paragraf sonlarını bulup değiştirmek mümkün olmaktadır.
“^“
$
ifadesine ters olarak, eğer terim sadece paragraf başında ise aranılan ifadeyi bulur. Örnek olarak ^Sabahleyin
ifadesi “Sabah, Sabahleyin…” gibi ifadelere sınır belirtilmemişse eşleşmeye devam eder.
^
köşeli parantez []
içinde kullanıldığında kendisinden sonra belirtilen karakter veya grubun bulunmayacağını ifade eder.
“*“
Önünde bulunduğu karakterin 0 veya tekrarlarıyla eşlenir. .*
ifadesi bütün karakterlere eşlenirken, a*t
ifadesi “t, tt, at” ile eşlenir.
“[ ]“
Köşeli parantezler, içindeki tüm karakterlerle eşlenir. Örnek olarak S[ai]z
ifadesi “Saz” ve “Siz” ile eşlenir.
“[c1-c2]“
Belirtilen aralığa göre -
ile eşleniklerin belirlenmesinde kullanılır. Örneğin [0-9]
ifadesi bütün rakamlar ile eşlenir. Birleşik ifadeye örnek olarak [A-Za-z]
ifadesi de bütün harflerle büyük küçük ayrımı yapmadan eşlenecektir.
“[^c1-c2]“
Belirtilen aralık harici bütün karakterlere eşlenir. Örnek olarak [^123a-z]
ifadesi 1, 2, 3 sayıları ve bütün küçük harfler dışında bütün ifadelere eşlenir.
“( )“
İfadeyi gruplandırır, gruplandırılmış ifadelerine denk gelen kalıpları (en fazla 9 kalıp) saklar.
Parantez içinde belirtilen karakterleri başvuru olarak tanımlar. İlk başvuruya \1
ile, ikinci başvuruya \2
gibi biçimlerde başvurulur. Örneğin, metniniz 1988, 1980, 1999, 1898 ve 1919 tarihlerini içersin. Aramanız (8)9\1
düzenli ifadesini kullanıyorsa, “898” sonucu bulunur.
Parantezleri terimleri gruplamak için kullanabilirsiniz; örneğin “a(bc)?d” ifadesi “ad” veya “abcd” ifadelerini bulacaktır.
“|“
Veya/yada anlamındadır, belirtilen iki ifadeyle ayrı ayrı eşlenebilir. Örneğin k(a|u)le
ifadesi, “kale” ve “kule” ifadelerine eşlenir.
“+“
Kendinden önce gelen ifadenin bir veya daha fazla kullanımına eşlenir. Örnek olarak z+
ifadesi z, zz, zzz… ile eşlenir.
“?“
Kendinden önce gelen ifadenin 0 veya 1 tekrarıyla eşlenir.
“{ }“
Kendinden önceki ifadenin belirlenen sayıda tekrarıyla eşlenir. Örneğin a[0-5]{2}
ifadesi a harfi ile başlayıp yanında 0 ile 5 arasında 2 tane rakam olan, a12, a24, a14 gibi ifadelerle eşlenir.
“{i,j}“
Belirtilen sayıda tekrar önceki ifade bağlamında eşlenir. Örneğin [0-9]{4,6}
ifadesi bütün 4, 5 veya 6 elemanlı sayı dizilerine eşlenir.
Karakter Etiketleri
“\d“
Tüm rakam karakterlerini temsil eder. [0-9]
ile aynı anlama gelir.
“\D“
Rakam olmayan tüm karakterleri temsil eder. [^0-9]
ile aynı anlama gelir.
“\w“
Word (Kelime) karakterlerini temsil eder. Bu, tüm rakamlar (digit; 0-9), harfler (a-z, A-Z) ve alt çizgi (underscore; _
) karakterini içerir. [a-zA-Z0-9_]
ile aynı anlama gelir.
“\W“
Kelime karakteri olmayan tüm karakterleri temsil eder. Bu, özel karakterler ve boşluk karakterleri gibi karakterlerdir. [^a-zA-Z0-9_]
ile aynı anlama gelir.
“\s“
[ \t\n\r\f]
herhangi bir boşluk karakteri
“\S“
[^ \t\n\r\f]
boşluk karakteri olmayan.
Kullanım olarak başlangıçta karışık görünebilir, ancak biraz pratikten sonra aslında kullanımının oldukça kolay ve işlevsel olduğu görülmektedir. Bir çok uygulama ve işlemde kullanılabildiği için pratik alanı oldukça geniştir. Kullanımına örnekler bağlamında hem ilgili hem de diğer konular içerisinde açıklamalar eklemeye devam edeceğim.