1 Haziran Pazar – Ulusal Regex Günü
Başlığı uzun tutmamak için kısaca Regex yazdım. Aslında uzun hali “Regular Expression”. Bunun tam olarak Türkçe karşılığını bilmiyorum, ama doğrudan İngilizce’den çevirirsek “Düzgün İfade” olabilir. Bilmeyenler halen neden bahsettiğimi anlamamış olabilir. Kısaca anlatayım:
Regular Expression, özellikle web sayfalarında (Windows ve Linux uygulamalarında da kullanılır) bazı alanları kontrol etmek için kullanılır. Örneğin kayıt formunda e-posta adresinin düzgün yazılmadığını kontrol edebilirsiniz. Böylece kullanıcı kayıdını gerçekleştiremez.
Regular Expression gerçekten programcının hayatını kolaylaştıran en önemli detaylardan bir tanesidir. Örneğin yukarıda bahsettiğim e-posta onaylama işlemi için string’teki herbir harfi teker teker kontrol edip, doğruysa devam etmesini ya da yanlışsa hata vermesini sağlayabilirsiniz. Ancak Regular Expression ile bu kadar uzun kod yazmaya gerek yoktur; e-postanın tipini belirlersiniz ve her şey kolaylaşır. Regular Expression’ı tek cümleyle anlatacak olursak, kontrol etmek istediğiniz alanlara sabit bir tanımlama (kalıp) yapar.
Regular Expression ile ilk tanıştığımda üniversitede SQL Parser programı yazıyordum. SELECT, INSERT, DELETE vb. SQL komutlarının çalıştırılabildiği kendi veritabanı projemizi yaratıyorduk. Olay neredeyse tamamen stringler üstünden dönüyordu (SELECT * FROM table WHERE username=’Can’ gibi) ve bu stringleri teker teker kontrol etmek ve yanlış yazıldıysa hata vermek tam bir kabusum olmuştu. 1 gün boyunca nasıl yapacağımı düşündüm. Acaba teker teker kontrol etsem çok mu uzun bir kod olurdu. Örnek olarak SELECT komutu için string kontrolü yaptım. Ama sonuç hüsran, yaklaşık 200 satır kod oldu. Daha bir yığın komut vardı. İşte bu durumda Regex ile tanıştım.
Regex’in yazımı ilk başta şifreli gibi görünebilir, ancak bir kere öğrendikten sonra gerçekten unutabileceğiniz bir şey değil. Örneğin benim programımdaki regex’ler şöyledi:
INSERT komutu: (INSERT)\s(INTO)\s(\w+)\s(VALUES)\s\((\w+|d+)(\,\s)?
(\w+|d+)?(\,\s)?(\w+|d+)?(\,\s)?(\w+|d+)?(\,\s)?(\w+|d+)(\,\s)?(\w+|d+)?\)
DROP komutu: (DROP)\s(\w+|\W+)\s(\w+)
CREATE (Index) komutu: (CREATE)\s(INDEX)\s(\w+)\s(ON)\s(\w+)(\,\s)?(\w+)?(\,\s)?(\w+)?(\,\s)?
(\w+)?(\,\s)?(\w+)?(\,\s)?(\w+)?
DELETE Komutu: (DELETE)\s(FROM)\s(\w+)(\s)?(WHERE)?(\s)?(\w+)?
(<(=)?|>(=)?|=|!=)?(\w+|d+)?
CREATE (Table) komutu: (CREATE)\s(\w+)\s\((\w+\s(CHAR|INT)\s\d+)(\,\s)?
(\w+\s(CHAR|INT)\s\d+)?(\,\s)?(\w+\s(CHAR|INT)\s\d+)?(\,\s)?
(\w+\s(CHAR|INT)\s\d+)?(\,\s)?(\w+\s(CHAR|INT)\s\d+)?
(\,\s)?(\w+\s(CHAR|INT)\s\d+)?(\,\s)?(\*\w+)(\,\s)?(\s)?
(\@\w+)?(\,\s)?(\s)?(\-\w+)?
Burada “w” (word – kelime), “s” (space – boşluk), “d” (digit – sayı) anlamındadır. Yanına koyulan “+” işareti de birden çok olduğunu gösterir. “?” işaretinden sonraki kısımlar “opsiyonel” kısımlardır.
Regular Expression hakkında daha detaylı bilgi için Regular Expression Library sitesini ziyaret edebilirsiniz.
Bir program geliştiriciyseniz (web geliştiricileri de dahil) ve Regular Expression kullanımını bilmiyorsanız, bu gerçekten sizin için çok büyük bir zaman kaybıdır.
Benim Regex ile tanışma hikayem böyleydi ve o gün bu gündür kendisiyle çok iyi anlaşırız =:-) Böyle anlamlı bir günde hediye olmazsa olmaz tabii. http://www.bennadel.com/index.cfm?dax=blog:1243.view ve http://blog.stevenlevithan.com/archives/regexday-2008 sitelerinde sizleri hediyeler de bekliyor.
2 Yorum
1 Haziran Ulusal RegEx Günü | Teknovole.com , 1 Haziran 2009 tarihinde
[...] yazı 1 Haziran 2008 Ulusal RegEx günü için kendi bloG‘umda yazdığım yazıdır. Bu yazıyı beğendiniz mi? O zaman paylaşmaya ne [...]


Get Your Regex Contest Entries in By Friday , 11 Haziran 2008 tarihinde
[...] the contest page has now been viewed a couple thousand times and was picked up by several developer sites, only a couple entries have been received so far. This means that your odds of winning are [...]