Düzenli İfadeler (Turkish)

Download Report

Transcript Düzenli İfadeler (Turkish)

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