240 likes | 826 Views
DÜZENLİ İFADELER. Regular Expressions. Edip Serdar GÜNER. Chomsky Hiyerarşisi. Özyinelemeli Sayılabilir Diller (Recursively Enumerable). Karmaşıklık. Bağlama Duyarlı Diller (Context – Sensitive). Bağlam Bağımsız Diller (Context – Free). Düzenli Diller (Regular). 0. 1. 2. 3.
E N D
DÜZENLİİFADELER Regular Expressions Edip Serdar GÜNER
Chomsky Hiyerarşisi Özyinelemeli Sayılabilir Diller (Recursively Enumerable) Karmaşıklık Bağlama Duyarlı Diller (Context – Sensitive) Bağlam Bağımsız Diller (Context – Free) Düzenli Diller (Regular) 0 1 2 3
Tip – 3 Diller Düzenli İfadeler Düzenli Diller Sonlu Durum Otomatları Düzenli Gramerler
Sonlu Durum Otomatları (FSAs) ! m e e q0 q1 q2 q3 q4 DFSA e ! m e e q0 q1 q2 q3 q4 e NFSA ! m e e q0 q1 q2 q3 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/ • /okula/ ‘Ali okula gelmedi.’ • /okul/ ‘Ali okula gelmedi.’ • /a/ ‘Ali okula gelmedi.’ • /okula gelmedi/ ‘Ali okula gelmedi.’ c a b q0 q1 q2 q3
Karakter Seçimi ve Aralıklar • Kare parantezler arasına yazılan karakterler, ‘veya’ (disjunction) işlemine tabi olurlar. • /a[bc]/ • ‘-’ 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 b a q0 q1 q2 c
Ekleme (Concatenation) ε q0 qf q0 qf FSA1 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, … • /[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. • /ab+c/ • /[0-9]+/ bir veya daha fazla sayıda ardışık rakam a b q2 q0 q1 c a b b q0 q1 q2 q3 c
Kleene * (Closure) ε ε ε q0 q0 qf qf FSA1 ε
| (pipe) • Bu karakter örüntüler arasında ‘veya’ işlevi görür. • /abc|ab/ • /elma|portakal/ elma veya portakal • ‘()’ şeklindeki normal parantezler içine alınan ifadeler tek bir karaktermiş gibi işlenir. • /a(bc|bd)/ • /yüz(er|erler)/ yüzer veya yüzerler c a b q0 q1 q2 q3 a b c q0 q1 q2 q3 d
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/ • /evleri?/ evler veya evleri • /colou?r/ color veya colour • ‘.’ karakteri tekil herhangi bir karakterin yerine geçebilir. • /dö.me/ dökme veya dövme gibi a b q2 c q0 q1 q3 c
İ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. • Aralık için olumsuzlama • /[^A-Z]/ büyük harf harici karakter • /[^Ss]/ S veya s harici karakter • /[^\.]/ nokta harici karakter • Satır başına bağlama • /^Asya/ satır başında ‘Asya‘ olan durum • 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: • 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 s/.* I am(depressed|sad) .*/I AM SORRY TO HEAR YOU ARE \1/ s/.* I am(depressed|sad) .*/WHY DO YOU THINK YOU ARE \1/ s/.* all .*/IN WHAT WAY/ s/.* always .*/CAN YOU THINK OF A SPECIFIC EXAMPLE/ 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
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