Reguliere Expressies



Vergelijkbare documenten
Automaten. Informatica, UvA. Yde Venema

Automaten & Complexiteit (X )

Talen & Automaten. Wim Hesselink Piter Dykstra Opleidingsinstituut Informatica en Cognitie 9 mei 2008

Inhoud eindtoets. Eindtoets. Introductie 2. Opgaven 3. Terugkoppeling 6

Het omzetten van reguliere expressies naar eindige automaten, zie de vakken Fundamentele Informatica 1 en 2.

Fundamenten van de Informatica

Automaten & Complexiteit (X )

3 De stelling van Kleene

Automaten & Complexiteit (X )

inleiding theoretische informatica practicum 1 deadline woensdag 20 februari 2008 om uur

Meetkundige Ongelijkheden Groep 2

Inleiding Programmeren 2

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Verzamelingen deel 2. Tweede college

Verzamelingen deel 3. Derde college

opgaven formele structuren deterministische eindige automaten

WI1808TH1/CiTG - Lineaire algebra deel 1

Formele talen. uitgebreid

De klasse van recursief opsombare talen is gesloten onder en. Dit bewijzen we met behulp van een recursieve opsomming

FP-theorie. 2IA50, Deel B. Inductieve definities 1/19. / department of mathematics and computer science

Inleiding Programmeren 2

Formeel Denken 2014 Uitwerkingen Tentamen

Reguliere Expressies

c, X/X a, c/λ a, X/aX b, X/X

Automaten en Berekenbaarheid

extra oefening algoritmiek - antwoorden

PYTHON REEKS 1: BASICS. Mathias Polfliet

Reguliere expressies

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

OEFENINGEN PYTHON REEKS 1

Python. Informatica. Renske Smetsers

Niet-numerieke data-types

Uitwerking Opgaven Formele talen, grammaticas en automaten Week 1

Logische Complexiteit

6.2 VBA Syntax. Inleiding Visual Basic

Bilineaire Vormen. Hoofdstuk 9

Tekstmanipulatie. Week 3: Reguliere expressies. Gosse Bouma 2007/2008. Informatiekunde Rijksuniversiteit Groningen

Meetkundige ongelijkheden Groep A

OEFENINGEN PYTHON REEKS 1

Samenvatting hst. 3 sec. 1-3

6.3 VBA Syntax Instructie. Wij gaan de Visual Basic Editor opnieuw openen, om de instructie die wij zojuist getypt hebben, nader te bekijken.

opgaven formele structuren tellen Opgave 1. Zij A een oneindige verzameling en B een eindige. Dat wil zeggen (zie pagina 6 van het dictaat): 2 a 2.

We beginnen met de eigenschappen van de gehele getallen.

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14

Formeel Denken. Herfst 2004

Zelftest Inleiding Programmeren

2. Syntaxis en semantiek

Introductie tot de cursus

OEFENINGEN PYTHON REEKS 1

Korte uitleg: Haakjes en Aanhalingstekens

Lineaire Algebra TW1205TI. I.A.M. Goddijn, Faculteit EWI 12 februari 2014

Algoritmiek. 8 uur college, zelfwerkzaamheid. Doel. Hoe te realiseren

1 Introductie. 2 Oppervlakteformules

1 Rekenen in eindige precisie

Gebruik van command-line operating systems

8.1 Herleiden [1] Herleiden bij vermenigvuldigen: -5 3a 6b 8c = -720abc 1) Vermenigvuldigen cijfers (let op teken) 2) Letters op alfabetische volgorde

WISKUNDE 5 PERIODEN. DATUM : 5 juni 2008 ( s morgens) Niet-programmeerbare, niet-grafische rekenmachine

Voorkennis : Breuken en letters

Hoofdstuk 1. Inleiding. Lichamen

Uitwerkingen Rekenen met cijfers en letters

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c

Semantische eigenschappen van XML-schematalen

equationeel programmeren college 1

Kennisrepresentatie & Redeneren. Piter Dykstra Instituut voor Informatica en Cognitie

Formeel Denken. Inhoudsopgave

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

Matrices en Grafen (wi1110ee)

Het oplossen van stelsels lineaire vergelijkingen Wiskunde 2, 2DM60 College 2b

Arrays. Complexe datastructuren. Waarom arrays. Geen stijlvol programma:

Gerichte Grafen Boolese Algebra s &. Logische Netwerken

Inleiding Logica voor CKI

Uitwerkingen. Python Assessment

Inhoudsopgave. Inhoud

In dit hoofdstuk introduceren we de hoofdrolspelers van het college: eindige automaten.

Onafhankelijke verzamelingen en Gewogen Oplossingen, door Donald E. Knuth, The Art of Computer Programming, Volume 4, Combinatorial Algorithms

Verzamelingen, Lijsten, Functioneel Programmeren

Regular Expressions in Java (2)

Transcriptie:

Reguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord) die, volgens bepaalde syntaxregels, een verzameling strings (een taal) beschrijft Reguliere expressies worden veel gebruikt in Unix texteditors, tools, programmeertalen, voor het zoeken naar patronen in tekst, en voor substitutie van strings 1/15 18 oktober 2004

Geschiedenis Theorie van formele talen Kleene s algebra van reguliere verzamelingen Ken Thompson introduceerde de notatie in de Unix editor ed Regex worden nu gebruikt in bijvoorbeeld grep, awk, emacs, vi, lex, perl. 2/15 18 oktober 2004

Reguliere expressies in de theorie van formele talen (1) Een reguliere expressie representeert een verzameling strings/woorden (een taal). Reguliere expressies worden opgebouwd uit constanten en operaties. Zij gegeven een eindig alfabet Σ, dan zijn de volgende constanten gedefinieerd: (lege verzameling) representeert de lege verzameling (lege string) ɛ representeert {ɛ} (ɛ is een string met lengte 0) (literals) een karakter a in Σ representeert de verzameling {a} 3/15 18 oktober 2004

Reguliere expressies in de theorie van formele talen (2) De operaties (voor reguliere expressies R en S): (concatenatie) RS representeert de verzameling {αβ α R, β S}. (vereniging) R S representeert de vereniging van R en S (Kleene star) R representeert de afsluiting van R onder concatenatie, i.e., R = ɛ R RR RRR Bindingsterkte: Kleene star > concatenatie > vereniging. Haakjes worden weggelaten als dat kan: (ab)c wordt geschreven als abc, en a (b(c )) als a bc 4/15 18 oktober 2004

Reguliere expressies in de theorie van formele talen (3) Voorbeelden. Laat Σ = {0, 1}. De expressies 00 en 0100100 representeren respectievelijk de verzamelingen {00} en {0100100} De expressies 0 1 en 10 01, representeren respectievelijk de verzamelingen {0, 1} en {10, 01} De expressies 0 en (01) representeren respectievelijk de verzamelingen {ɛ, 0, 00, 000,...} en {ɛ, 01, 0101, 010101,...} De expressie (0 00)1 representeert {0, 00, 01, 001, 011, 0011,...} (0 00)1 = 01 001 5/15 18 oktober 2004

Reguliere expressies in de theorie van formele talen (4) Meer voorbeelden. a b representeert {a, ɛ, b, bb, bbb,...} (a b) representeert de verzameling van alle strings bestaande uit a s en b s, inclusief de lege string b (ab ) idem ab (c ɛ) representeert de verzameling van strings die beginnen met een enkele a, gevolgd door nul of meer b s, en eindigend met optioneel een c 6/15 18 oktober 2004

Reguliere talen De talen die door reguliere expressies kunnen worden gerepresenteerd noemen we de reguliere talen Daarmee corresponderen ze met de zogenaamde type 3 grammatica s in de Chomsky hierarchy Ze zijn minder expressief dan context-vrije grammatica s (CFGs) zoals BNF (Backus-Naur Form) grammatica s Zo kun je bijvoorbeeld in reguliere expressies geen nesting definieren Noot: de syntax van Perl is veel rijker dan die van reguliere expressies; strict genomen zijn de reguliere expressies van Perl niet regulier. Deze expressivieteit kan ten koste gaan van de effectiviteit: worstcase complexiteit van matchen van een string tegen een Perl regex is 7/15 18 oktober 2004

exponentieel in de lengte van de input. (In de praktijk valt dit gelukkig mee.) 8/15 18 oktober 2004

Voorbeeld BNF grammatica <bit> ::= 0 1 <expr> ::= <bit> (<expr> + <expr>) (<expr> * <expr>) Deze BNF grammatica genereert o.a. de strings 0, 1, (0 + 1), (1 * (1 + 1)) Noot: de taal die gegenereerd wordt door deze grammatica is context-vrij, maar niet regulier; je kunt de expressies van deze taal niet met een reguliere expressie karakteriseren 9/15 18 oktober 2004

Unix regexps (1) De volgende syntax is min of meer standaard voor veel Unix tools en programmeertalen. Basisregels: 1. Ieder afdrukbaar ASCII karakter dat geen metakarakter is, is een reguliere expressie die zichzelf representeert. 2.. representeert ieder enkel karakter 3. ˆrepresenteert het begin van een regel 4. $ representeert het einde van een regel 5. \ gevolgd door een metakarakter representeert dat karakter zelf. Dus: \. representeert een punt (.) 10/15 18 oktober 2004

6. [ ] representeert een enkel karakter. Tussen de haken staat een karakterisering. [a] representeert karakter a [abc] representeert karakter a, b, of c [a z] representeert een karakter in de range a z (karakters geordend volgens hun ASCII codering) [A Za z0 9] representeert een cijfer of letter [ˆE] representeert ieder karakter dat niet door [E] gerepresenteerd wordt [acq z] representeert a, c, of een karakter in q z. 11/15 18 oktober 2004

Unix regexps (2) Inductieve regels: Als A en B reguliere expressies zijn, dan 1. AB is een reguliere expressie (concatenatie), 2. A B is een reguliere expressie (keuze/vereniging), 3. A is een reguliere expressie (Kleene star) 4. A+ is een reguliere expressie (één of meer geconcateneerde voorkomens van A) 5. A? is een reguliere expressie (nul of één voorkomens van A) 6. (A) is een reguliere expressie (Perl) 7. \(A\) is een reguliere expressie (vi) 12/15 18 oktober 2004

8. (Perl) A{m, n} voor integers m en n representeert m tot n geconcateneerde voorkomens van A. 9. (Perl) A{m} voor integer m representeert m geconcateneerde voorkomens van A. 10. Concatenatie bindt sterker dan keuze, dus A BC = A (BC) 13/15 18 oktober 2004

Voorbeelden Wat staat hier (perl)? $timestr =~ s/([0-9]+):([0-5][0-9]):([0-5][0-9])/\2 min., \3 sec. after \1/; En hier (vi)? s/\([0-9]+\):\([0-5][0-9]\):\([0-5][0-9]\)/\2 min., \3 sec. after \1/; 14/15 18 oktober 2004

Meer voorbeelden.ap representeert o.a. aap, lap, kap [al]ap representeert aap en lap [ˆa]ap representeert o.a. lap en kap, maar niet aap ˆ[al]ap representeert aap en lap, maar alleen aan het begin van een regel [al]ap$ representeert aap en lap, maar alleen aan het einde van een regel [al]+ap representeert o.a. aap, lap, aaap, alap, laap, llap, etc. [al]?ap representeert ap, aap en lap [aa]ap [nn]oot representeert aap, Aap, noot, en Noot.\.(\( \)) representeert o.a. a.) 15/15 18 oktober 2004