DÜZENLİ İFADELER Regular Expressions Edip Serdar GÜNER Karmaşıklık Chomsky Hiyerarşisi Özyinelemeli Sayılabilir Diller (Recursively Enumerable) Bağlama Duyarlı Diller (Context – Sensitive) Bağlam Bağımsız Diller (Context – Free) 0 1 2 3 Düzenli Diller (Regular) Tip – 3 Diller Düzenli İfadeler Düzenli Diller Sonlu Durum Otomatları Düzenli Gramerler Sonlu Durum Otomatları (FSAs) m q0 e q1 ! e q2 q3 q4 DFSA e m q0 e q1 ! e q2 q3 e m q0 e q1 q3 ε NFSA ! e q2 q4 q4 Düzenli İfadeler • Formel Tanım: Karakter katarı kümelerinin cebirsel olarak tanımlanmasını sağlayan bir gösterim yöntemidir (Stephen C. Kleene, 1956). • Karakter dizileri içinde, belirlenen örüntüleri (pattern) taramaya yarar. • Kullanım alanları: – – – – – Arama motorları Bilgi edinim (Information retrieval) Kelime işleme (Word processing) Veri doğrulama (Data validation) ... Basit Düzenli İfadeler • En basit düzenli ifadeler karakterlerin sıralı biçimde dizilmesiyle oluşur. • Düzenli ifadeler büyük – küçük harf duyarlıdır. • /abc/ a q0 • • • • c b q1 q2 /okula/ ‘Ali okula gelmedi.’ /okul/ ‘Ali okula gelmedi.’ /a/ ‘Ali okula gelmedi.’ /okula gelmedi/ ‘Ali okula gelmedi.’ q3 Karakter Seçimi ve Aralıklar • Kare parantezler arasına yazılan karakterler, ‘veya’ (disjunction) işlemine tabi olurlar. • /a[bc]/ b a q0 q1 q2 c • ‘-’ işareti ile kare parantez içinde bir aralık belirtilebilir. • • • • • • /[Bb]ahçe/ Bahçe veya bahçe /[abc]/ a veya b veya c /[1234567890]/ Herhangi bir rakam /[A-Z]/ Herhangi bir büyük harf (İngiliz alfabesindeki 26 harften biri) /[a-z]/ Herhangi bir küçük harf (İngiliz alfabesindeki 26 harften biri) /[0-9]/ Herhangi bir rakam Ekleme (Concatenation) ε q0 qf FSA1 q0 qf FSA2 * ve + (Kleene star / plus) • ‘*’ karakteri kendinden önce gelen karakterin veya düzenli ifadenin 0 veya daha fazla kez ardışık olarak tekrarlanabileceğini belirtir. • /ab*c/ ac, abc, abbc, abbbc, … a q0 b q2 q1 c • /[0-9][0-9]*/ bir veya daha fazla sayıda ardışık rakam • ‘+’ karakteri kendinden önce gelen karakterin veya düzenli ifadenin 1 veya daha fazla kez ardışık olarak tekrarlanabileceğini belirtir. a • /ab+c/ q0 b q1 b q2 • /[0-9]+/ bir veya daha fazla sayıda ardışık rakam c q3 Kleene * (Closure) ε q0 ε q0 qf FSA1 ε ε qf | (pipe) • Bu karakter örüntüler arasında ‘veya’ işlevi görür. • /abc|ab/ a q0 c b q1 q2 q3 • /elma|portakal/ elma veya portakal • ‘()’ şeklindeki normal parantezler içine alınan ifadeler tek bir karaktermiş gibi işlenir. • /a(bc|bd)/ q0 a b q1 c q2 q3 d • /yüz(er|erler)/ yüzer veya yüzerler Birleşme (Union) q0 qf ε ε FSA1 q0 qf ε ε q0 qf FSA2 ? ve . • ‘?’ karakteri kendinden önce gelen karakterin veya düzenli ifadenin seçimlik olduğunu belirtir. – /ab?c/ a q0 b q2 q1 • /evleri?/ evler veya evleri • /colou?r/ color veya colour c q3 c • ‘.’ karakteri tekil herhangi bir karakterin yerine geçebilir. • /dö.me/ dökme veya dövme gibi İfade Sınırları • \b özel karakteri, kullanıldığı yere göre, aranan ifadenin önünde veya arkasında sınırlayıcı (boşluk gibi) karakterleri sınır olarak kabul eder. • /\beli\b/ önünde ve arkasında boşluk olan ‘eli’ ifadesini bulur • \B karakteri sınırlandırma olmayan durumu belirtir. ^ (caret) ve $ • ^ karakteri 3 farklı şekilde kullanılabilir. 1) Aralık için olumsuzlama • /[^A-Z]/ büyük harf harici karakter • /[^Ss]/ S veya s harici karakter • /[^\.]/ nokta harici karakter 2) Satır başına bağlama • /^Asya/ satır başında ‘Asya‘ olan durum 3) Normal karakter olarak kullanım • /[e^]/ e veya ^ • /a^b/ a^b örüntüsü • $ karakteri ise normal bir karakter olarak kullanılabileceği gibi satır sonuna bağlama için de kullanılabilir. • /gittiler\.$/ satır sonunda ‘gittiler’ olan durum Sayaçlar • Herhangi bir düzenli ifadenin ne kadar tekrarlanacağını belirtirler. • {n} kendinden önceki düzenli ifade n defa ardışık olmalıdır. • {n, m} kendinden önceki düzenli ifade en az n, en çok m defa ardışık olmalıdır. • {n,} kendinden önceki düzenli ifade en az n defa ardışık olmalıdır. Operatör Öncelik Hiyerarşisi • En yüksekten en düşük öncelikli operatöre doğru sıralama şu şekildedir: 1. 2. 3. 4. Parantez () Sayaçlar * + ? {} Seriler veya bağlayıcılar evler ^Yarın gelecek$ Veya | (pipe) Özel Operatörler • • • • • • • • • • • \d herhangi bir rakam ([0-9]) \D rakam olmayan bir karakter ([^0-9]) \w alfanümerik karakterler ve _ karakteri ([a-zA-Z0-9_]) \W alfanümerik olmayan karakterler ([^\w]) \s boşluk karakterleri ([ \r\t\n\f]) \S boşluk olmayan karakter ([^\s]) \n newline \r carriage return \t tab \f form feed \. nokta Örnekler • Tarih 02/04/2010 – (\d{1,2}\/\d{1,2}\/\d{4}) • E-posta adresi – (\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,6}) • IP adresi – \b([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\b Yer Değiştirme (Substitution) • Bazı durumlarda arama işlemine ek olarak, bulunan örüntü örneğinin yer değiştirmesi de gerekebilir. • Bu işlem için düzenli ifadelerin temel tanımına ait olmayıp, gelişmiş bir özellik olan bellek kullanımı gereklidir. • Bu özellik kullanıldığında ifade gücü Tip – 3 dillerin üzerine çıkar. • Arama örüntüsü içinde ‘(‘ ile başlayıp, ‘)’ ile biten parçalara yer değiştirme işleminde, \1 gibi numaralı bir yazmaç (register) ile referansta bulunulur. ELIZA User: Men are all alike. ELIZA: IN WHAT WAY User: They are always bugging us about something or other. ELIZA: CAN YOU THINK OF A SPECIFIC EXAMPLE User: Well, my boyfriend made me come here. ELIZA: YOUR BOYFRIEND MADE YOU COME HERE User: He says I am depressed much of the time. ELIZA: I AM SORRY TO HEAR YOU ARE DEPRESSED s/.* s/.* s/.* s/.* I am(depressed|sad) .*/I AM SORRY TO HEAR YOU ARE \1/ I am(depressed|sad) .*/WHY DO YOU THINK YOU ARE \1/ all .*/IN WHAT WAY/ always .*/CAN YOU THINK OF A SPECIFIC EXAMPLE/ Bağlantılar • Düzenli ifadeler •http://en.wikipedia.org/wiki/Regular_expression •http://www.regular-expressions.info/ •http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/ • Düzenli ifadeler ve FSA •http://osteele.com/tools/reanimator/ •http://www.cs.duke.edu/csed/jflap/ • Test araçları •http://www.dmoz.org/Computers/Programming/Languages/Regular_Expressions • Kaynak kitaplar •Speech and Language Processing (2nd Edition), Daniel Jurafsky & James H. Martin •Mastering Regular Expressions (3rd Edition), Jeffrey E. F. Friedl