ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is...
Transcript of ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is...
ESA College 5b
Mark van der Zwaag
Programming Research Group, UvA
7 oktober 2006
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 1 / 34
Vandaag: Reguliere Expressies en Grammatica’s
Formele talenContext-vrije grammatica’s; BNF, ABNFUnix Reguliere Expressies
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 2 / 34
Reguliere Expressies
Een reguliere expressie (regexp, regex, regxp) is een string (eenwoord), die, volgens bepaalde syntaxregels, een verzamelingstrings (een taal) beschrijftReguliere expressies worden veel gebruikt in Unix texteditors,tools, programmeertalen, voor het zoeken naar patronen in tekst,en voor substitutie van strings
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 3 / 34
Geschiedenis
Theorie van formele talenKleene’s algebra van reguliere verzamelingenKen Thompson introduceerde de notatie in de Unix editor edRegex worden nu gebruikt in bijvoorbeeld grep, awk, emacs, vi,perl.
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 4 / 34
Reguliere expressies in de theorie van formele talen
Een reguliere expressie representeert een verzamelingstrings/woorden (een taal). Reguliere expressies worden opgebouwduit constanten en operaties.
Zij gegeven een eindig alfabet Σ, dan zijn de volgende constantengedefinieerd:
(lege verzameling) ∅ representeert de lege verzameling ∅(lege string, met lengte 0) ε representeert de verzameling {ε}(literals) een karakter a in Σ representeert de verzameling {a}
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 5 / 34
Reguliere expressies in de theorie van formele talen
De operaties (voor reguliere expressies R en S):(concatenatie) (RS) representeert de verzameling{αβ | α ∈ R, β ∈ S}(vereniging/keuze) (R | S) representeert de vereniging van R en S(Kleene star/iteratie) (R)∗ representeert de afsluiting van R onderconcatenatie, i.e.,
R∗ = {ε} ∪ R ∪ RR ∪ RRR ∪ · · ·
Bindingsterkte:
Kleene star > concatenatie > vereniging
Haakjes worden weggelaten als dat kan: ((ab)c) wordt geschreven alsabc, en (a | (b(c)∗)) als a | bc∗.
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 6 / 34
Reguliere expressies in de theorie van formele talen
Voorbeelden. Zij Σ = {0, 1} .00 representeert {00}0100100 representeert {0100100}
0 | 1 representeert {0, 1}10 | 01 representeert {10, 01}0∗ representeert {ε, 0, 00, 000, . . .}(01)∗ representeert {ε, 01, 0101, 010101, . . .}(0 | 00)1∗ representeert {0, 00, 01, 001, 011, 0011, . . .}(0 | 00)1∗ = 01∗ | 001∗
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 7 / 34
Reguliere expressies in de theorie van formele talen
Voorbeelden. Zij Σ = {0, 1} .00 representeert {00}0100100 representeert {0100100}0 | 1 representeert {0, 1}10 | 01 representeert {10, 01}
0∗ representeert {ε, 0, 00, 000, . . .}(01)∗ representeert {ε, 01, 0101, 010101, . . .}(0 | 00)1∗ representeert {0, 00, 01, 001, 011, 0011, . . .}(0 | 00)1∗ = 01∗ | 001∗
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 7 / 34
Reguliere expressies in de theorie van formele talen
Voorbeelden. Zij Σ = {0, 1} .00 representeert {00}0100100 representeert {0100100}0 | 1 representeert {0, 1}10 | 01 representeert {10, 01}0∗ representeert {ε, 0, 00, 000, . . .}(01)∗ representeert {ε, 01, 0101, 010101, . . .}
(0 | 00)1∗ representeert {0, 00, 01, 001, 011, 0011, . . .}(0 | 00)1∗ = 01∗ | 001∗
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 7 / 34
Reguliere expressies in de theorie van formele talen
Voorbeelden. Zij Σ = {0, 1} .00 representeert {00}0100100 representeert {0100100}0 | 1 representeert {0, 1}10 | 01 representeert {10, 01}0∗ representeert {ε, 0, 00, 000, . . .}(01)∗ representeert {ε, 01, 0101, 010101, . . .}(0 | 00)1∗ representeert {0, 00, 01, 001, 011, 0011, . . .}(0 | 00)1∗ = 01∗ | 001∗
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 7 / 34
Reguliere expressies in de theorie van formele talen
Meer Voorbeelden.a | b∗ representeert {a, ε, b, bb, . . .}(a | b)∗ = b∗(ab∗)∗
ab∗(c | ε) representeert de verzameling van strings die beginnenmet een enkele a, gevolgd door nul of meer b’s, en eindigend metoptioneel een c.
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 8 / 34
Reguliere Talen
De talen die door reguliere expressies kunnen wordengerepresenteerd noemen we de reguliere talenZe corresponderen met de zogenaamde “type 3” grammatica’s inde Chomsky hierarchy
Voorbeeld Reguliere Grammatica
S → aSS → bAA → ε
A → cA
met startsymbool S correspondeert met reguliere expressie
a∗bc∗.
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 9 / 34
Reguliere Talen
De talen die door reguliere expressies kunnen wordengerepresenteerd noemen we de reguliere talenZe corresponderen met de zogenaamde “type 3” grammatica’s inde Chomsky hierarchy
Voorbeeld Reguliere Grammatica
S → aSS → bAA → ε
A → cA
met startsymbool S correspondeert met reguliere expressie a∗bc∗.
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 9 / 34
Context-Vrije Talen
Reguliere expressies/talen/grammatica’s zijn minder expressief dancontext-vrije grammatica’s (CFGs).
Voorbeeld Context-Vrije Taal akbk
CFG
S → aSbS → ε
met startsymbool S. Deze taal is niet door een reguliere expressie tekarakteriseren.
Noot: Bijv. Perl reguliere expressies zijn strict genomen niet regulier.Deze grotere expressiviteit kan ten koste gaan van de effectiviteit:worst-case complexiteit van matchen van een string tegen een Perlregex is exponentieel in de lengte van de input. (In de praktijk valt ditgelukkig mee.)
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 10 / 34
Context-Vrije Talen
Reguliere expressies/talen/grammatica’s zijn minder expressief dancontext-vrije grammatica’s (CFGs).
Voorbeeld Context-Vrije Taal akbk
CFG
S → aSbS → ε
met startsymbool S. Deze taal is niet door een reguliere expressie tekarakteriseren.
Noot: Bijv. Perl reguliere expressies zijn strict genomen niet regulier.Deze grotere expressiviteit kan ten koste gaan van de effectiviteit:worst-case complexiteit van matchen van een string tegen een Perlregex is exponentieel in de lengte van de input. (In de praktijk valt ditgelukkig mee.)
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 10 / 34
Voorbeeld BNF Grammatica
Backus-Naur Form: een formaat voor de definitie van CFG’s.
<bit> ::= 0 | 1<expr> ::= <bit> | (<expr> + <expr>) |
(<expr> * <expr>)
Deze BNF grammatica genereert o.a. de strings
0, 1, (0 + 1), (1 ∗ (1 + 1))
Non-terminals: <bit>, <expr>Terminals: 0, 1, (, ), *, +, (spatie)
Noot: Deze taal is context-vrij, maar niet regulier; niet met eenreguliere expressie te karakteriseren
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 11 / 34
Voorbeeld BNF Grammatica
Backus-Naur Form: een formaat voor de definitie van CFG’s.
<bit> ::= 0 | 1<expr> ::= <bit> | (<expr> + <expr>) |
(<expr> * <expr>)
Deze BNF grammatica genereert o.a. de strings
0, 1, (0 + 1), (1 ∗ (1 + 1))
Non-terminals: <bit>, <expr>Terminals: 0, 1, (, ), *, +, (spatie)
Noot: Deze taal is context-vrij, maar niet regulier; niet met eenreguliere expressie te karakteriseren
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 11 / 34
ABNF: Augmented BNF
RFC 2234, Augmented BNF for Syntax Specifications: ABNF.Obsolete.RFC 4234, Augmented BNF for Syntax Specifications: ABNF.O.a. specificatie van ABNF in ABNF
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 12 / 34
ABNF: Rules
Rules have names like “elements”, “rule0” and “char-a-z”Rulenames may be put inside brackets <elements>Case-insensitive: <rulename>, <rULeNamE>, and <RULENAME>refer to the same rule
A rule is defined by a sequence
name = elements ; comment crlf
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 13 / 34
ABNF: Rules
Rules have names like “elements”, “rule0” and “char-a-z”Rulenames may be put inside brackets <elements>Case-insensitive: <rulename>, <rULeNamE>, and <RULENAME>refer to the same rule
A rule is defined by a sequence
name = elements ; comment crlf
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 13 / 34
ABNF: Terminal Values
Terminal values: charactersA character encoding like US-ASCII may be used
%b1000001 (binary 65, US-ASCII "A")%x42 (hexadecimal 66, US-ASCII "B")%d67 (decimal 67, US-ASCII "C")%d13.10 (the sequence CR,LF)
Literal text: "abc" (the sequence a,b,c)NB: case-insensitive US-ASCII
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 14 / 34
Voorbeeld
rulename = "abc"enrulename = "ABc"generen beiden de verzameling{ abc, Abc, aBc, abC, ABc, aBC, AbC, ABC}
rulename = %d97 %d98 %d99enrulename = %d97.98.99generen beiden de verzameling{ abc }
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 15 / 34
Voorbeeld
rulename = "abc"enrulename = "ABc"generen beiden de verzameling{ abc, Abc, aBc, abC, ABc, aBC, AbC, ABC}
rulename = %d97 %d98 %d99enrulename = %d97.98.99generen beiden de verzameling{ abc }
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 15 / 34
ABNF: Basic operators
ConcatenationAlternativesRepetition (variable)GroupingComments
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 16 / 34
ABNF: Concatenation
Rule = Rule1 Rule2Example
magic = xyzzy foo barxyzzy = "xyzzy"foo = "foo"bar = "bar"magic −→ "xyzzyfoobar"
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 17 / 34
ABNF: Alternatives
Rule = Rule1 / Rule2Sometimes uses pipe (|) instead of /Example
magic = xyzzy / foo / barmagic −→ "xyzzy", but alsomagic −→ "foo", and alsomagic −→ "bar"
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 18 / 34
ABNF: Variable Repetition
Rule = <n> * <m> Rule1n and m are optional decimal valuesDefault for n is 0 and for m is ∞Example
magic = <2> * <3> xyzzymagic −→ "xyzzyxyzzy"magic −→ "xyzzyxyzzyxyzzy"
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 19 / 34
ABNF: Grouping
Rule = ( Rule1 )Only used for parsing (syntax)Has no semantic counterpartExample
magictoo = ( magic )magictoo has the same productions as magic
Exampleelem (foo / bar) blat vs elem foo / bar blatUse grouping to avoid misunderstanding:(elem foo) / (bar blat)
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 20 / 34
ABNF: Grouping
Rule = ( Rule1 )Only used for parsing (syntax)Has no semantic counterpartExample
magictoo = ( magic )magictoo has the same productions as magic
Exampleelem (foo / bar) blat vs elem foo / bar blatUse grouping to avoid misunderstanding:(elem foo) / (bar blat)
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 20 / 34
ABNF: Comment
Rule = . . . ; Followed by an explanationExample
magic = xyzzy "," foo "," bar ; comma separated magicmagic −→ "xyzzy,foo,bar"
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 21 / 34
ABNF: More operators
Incremental alternativeValue rangesOptional presenceSpecific repetition
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 22 / 34
ABNF: Incremental alternative
Alternatives may be added later in extra rulesRule =/ Rule1Example
magic = "xyzzy"magic =/ "foo"magic =/ "bar"Equivalently: magic = "xyzzy" / "foo" / "bar"
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 23 / 34
ABNF: Value ranges
Uses "-" as range indicator in terminal specificationsExample
DIGIT = %x30-39 ; "0" / "1" / . . . / "9"UPPER = %x41-5A ; "A" / "B" / . . . / "Z"
DIGIT is a Core Rule. More core rules:ALPHA = %x41-5A / %x61-7A ; A-Z / a-zBIT = "0" / "1"
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 24 / 34
ABNF: Value ranges
Uses "-" as range indicator in terminal specificationsExample
DIGIT = %x30-39 ; "0" / "1" / . . . / "9"UPPER = %x41-5A ; "A" / "B" / . . . / "Z"
DIGIT is a Core Rule. More core rules:ALPHA = %x41-5A / %x61-7A ; A-Z / a-zBIT = "0" / "1"
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 24 / 34
ABNF: Optional presence
Rule = [ Rule1 ]Equivalently: Rule = *<1> Rule1Example
magic = [ "xyzzy" ]magic −→ "xyzzy" but alsomagic −→ ""
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 25 / 34
ABNF: Specific repetition
Rule = <n> Rule1Equivalently: Rule = <n> * <n> Rule1Example
magic = <3> "xyzzy"magic −→ "xyzzyxyzzyxyzzy"
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 26 / 34
Unix regexps
De volgende syntax is min of meer standaard voor veel Unix tools enprogrammeertalen.Basisregels:
1 Ieder afdrukbaar ASCII karakter dat geen metakarakter is, is eenreguliere expressie die zichzelf representeert, bv., a voor de letter‘a’.
2 . representeert ieder enkel karakter (behalve newline)
3 ˆ representeert het begin van een regel4 $ representeert het einde van een regel5 \ gevolgd door een metakarakter representeert dat karakter zelf.
Dus: \. representeert een punt (.)6 [E ] representeert een enkel karakter. Tussen de haken staat een
karakterisering E .
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 27 / 34
Unix regexps
De volgende syntax is min of meer standaard voor veel Unix tools enprogrammeertalen.Basisregels:
1 Ieder afdrukbaar ASCII karakter dat geen metakarakter is, is eenreguliere expressie die zichzelf representeert, bv., a voor de letter‘a’.
2 . representeert ieder enkel karakter (behalve newline)3 ˆ representeert het begin van een regel4 $ representeert het einde van een regel
5 \ gevolgd door een metakarakter representeert dat karakter zelf.Dus: \. representeert een punt (.)
6 [E ] representeert een enkel karakter. Tussen de haken staat eenkarakterisering E .
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 27 / 34
Unix regexps
De volgende syntax is min of meer standaard voor veel Unix tools enprogrammeertalen.Basisregels:
1 Ieder afdrukbaar ASCII karakter dat geen metakarakter is, is eenreguliere expressie die zichzelf representeert, bv., a voor de letter‘a’.
2 . representeert ieder enkel karakter (behalve newline)3 ˆ representeert het begin van een regel4 $ representeert het einde van een regel5 \ gevolgd door een metakarakter representeert dat karakter zelf.
Dus: \. representeert een punt (.)6 [E ] representeert een enkel karakter. Tussen de haken staat een
karakterisering E .
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 27 / 34
Voorbeelden:[a] representeert ‘a’[abc] representeert ieder van ‘a’, ‘b’, en ‘c’[a−z] representeert een karakter in de range ‘a’–‘z’ (geordendvolgens ASCII codering)[A−Za−z0−9] representeert een cijfer of letter
[̂ E ] representeert ieder karakter dat niet door [E ] gerepresenteerdwordt[acq−z] representeert ‘a’, ‘c’, of een karakter in ‘q’–‘z’.
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 28 / 34
Voorbeelden:[a] representeert ‘a’[abc] representeert ieder van ‘a’, ‘b’, en ‘c’[a−z] representeert een karakter in de range ‘a’–‘z’ (geordendvolgens ASCII codering)[A−Za−z0−9] representeert een cijfer of letter[̂ E ] representeert ieder karakter dat niet door [E ] gerepresenteerdwordt[acq−z] representeert ‘a’, ‘c’, of een karakter in ‘q’–‘z’.
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 28 / 34
Unix regexps
Inductieve regels: Als A en B reguliere expressies zijn, dan1 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 (awk, egrep, perl)7 \(A\) is een reguliere expressie (vi, sed, grep)8 A{m, n} voor integers m en n representeert m tot n
geconcateneerde voorkomens van A.9 A{m} voor m geconcateneerde voorkomens van A.
Iteratie bindt sterker dan concatenatie bindt sterker dan keuze, dusA|BC∗ = A|(B(C)∗)
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 29 / 34
Unix regexps
Inductieve regels: Als A en B reguliere expressies zijn, dan1 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 (awk, egrep, perl)7 \(A\) is een reguliere expressie (vi, sed, grep)8 A{m, n} voor integers m en n representeert m tot n
geconcateneerde voorkomens van A.9 A{m} voor m geconcateneerde voorkomens van A.
Iteratie bindt sterker dan concatenatie bindt sterker dan keuze, dusA|BC∗ = A|(B(C)∗)
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 29 / 34
Unix regexps
Inductieve regels: Als A en B reguliere expressies zijn, dan1 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 (awk, egrep, perl)7 \(A\) is een reguliere expressie (vi, sed, grep)8 A{m, n} voor integers m en n representeert m tot n
geconcateneerde voorkomens van A.9 A{m} voor m geconcateneerde voorkomens van A.
Iteratie bindt sterker dan concatenatie bindt sterker dan keuze, dusA|BC∗ = A|(B(C)∗)
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 29 / 34
Unix regexps
Inductieve regels: Als A en B reguliere expressies zijn, dan1 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 (awk, egrep, perl)7 \(A\) is een reguliere expressie (vi, sed, grep)
8 A{m, n} voor integers m en n representeert m tot ngeconcateneerde voorkomens van A.
9 A{m} voor m geconcateneerde voorkomens van A.Iteratie bindt sterker dan concatenatie bindt sterker dan keuze, dusA|BC∗ = A|(B(C)∗)
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 29 / 34
Unix regexps
Inductieve regels: Als A en B reguliere expressies zijn, dan1 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 (awk, egrep, perl)7 \(A\) is een reguliere expressie (vi, sed, grep)8 A{m, n} voor integers m en n representeert m tot n
geconcateneerde voorkomens van A.9 A{m} voor m geconcateneerde voorkomens van A.
Iteratie bindt sterker dan concatenatie bindt sterker dan keuze, dusA|BC∗ = A|(B(C)∗)
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 29 / 34
$ cat aap(aap)aap$ grep ’(aap)’ aap(aap)$ grep -E ’(aap)’ aap(aap)aap$ cat nootnotnootnooot$ grep ’o\{2\}’ nootnootnooot$ grep -E ’o{3}’ nootnooot
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 30 / 34
Meer Voorbeelden
regex wel nietA. A9, Aa, AA aA, AAAa.c abc, aac, a4c, a+c ABC, abcd, abbca\.c a.c abc
.ap aap, lap, hap[al]ap aap, lap[̂ al]ap hap, kap aap, lap[al]+ap aap, lap, aaap, alap, laap, llap[̂ A-Z] 5, b A, Q, W[abc]* aaab, cbaIets.* Iets, Iets is beter dan nietsIets.+ Iets is beter dan niets Iets
[ab]{4}, [ab]\{4\} abba, baba abaa(bc)*d ad, abc, abcbcd abcxd, bcbcd
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 31 / 34
Meer Voorbeelden
regex wel nietA. A9, Aa, AA aA, AAAa.c abc, aac, a4c, a+c ABC, abcd, abbca\.c a.c abc.ap aap, lap, hap
[al]ap aap, lap[̂ al]ap hap, kap aap, lap[al]+ap aap, lap, aaap, alap, laap, llap
[̂ A-Z] 5, b A, Q, W[abc]* aaab, cbaIets.* Iets, Iets is beter dan nietsIets.+ Iets is beter dan niets Iets
[ab]{4}, [ab]\{4\} abba, baba abaa(bc)*d ad, abc, abcbcd abcxd, bcbcd
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 31 / 34
Meer Voorbeelden
regex wel nietA. A9, Aa, AA aA, AAAa.c abc, aac, a4c, a+c ABC, abcd, abbca\.c a.c abc.ap aap, lap, hap
[al]ap aap, lap[̂ al]ap hap, kap aap, lap[al]+ap aap, lap, aaap, alap, laap, llap[̂ A-Z] 5, b A, Q, W[abc]* aaab, cbaIets.* Iets, Iets is beter dan nietsIets.+ Iets is beter dan niets Iets
[ab]{4}, [ab]\{4\} abba, baba abaa(bc)*d ad, abc, abcbcd abcxd, bcbcd
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 31 / 34
Meer Voorbeelden
regex wel nietA. A9, Aa, AA aA, AAAa.c abc, aac, a4c, a+c ABC, abcd, abbca\.c a.c abc.ap aap, lap, hap
[al]ap aap, lap[̂ al]ap hap, kap aap, lap[al]+ap aap, lap, aaap, alap, laap, llap[̂ A-Z] 5, b A, Q, W[abc]* aaab, cbaIets.* Iets, Iets is beter dan nietsIets.+ Iets is beter dan niets Iets
[ab]{4}, [ab]\{4\} abba, baba abaa(bc)*d ad, abc, abcbcd abcxd, bcbcd
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 31 / 34
Telefoonnummer vast:
ˆ[-0-9+() ]*$
ˆ[0-9]{3,4}-[0-9]{6,7}$
020-5253705
Postcode:
ˆ[1-9]{1}[0-9]{3}[:space:]?[A-Z]{2}
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 32 / 34
Telefoonnummer vast:
ˆ[-0-9+() ]*$
ˆ[0-9]{3,4}-[0-9]{6,7}$
020-5253705
Postcode:
ˆ[1-9]{1}[0-9]{3}[:space:]?[A-Z]{2}
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 32 / 34
Emailadres:
[A-Za-z0-9_-]+([.]{1}[A-Za-z0-9_-]+)*@[A-Za-z0-9-]+([.]{1}[A-Za-z0-9-]+)+
Mobiel nummer:
ˆ06[-]?[0-9]{8}$
06-20369972
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 33 / 34
Emailadres:
[A-Za-z0-9_-]+([.]{1}[A-Za-z0-9_-]+)*@[A-Za-z0-9-]+([.]{1}[A-Za-z0-9-]+)+
Mobiel nummer:
ˆ06[-]?[0-9]{8}$
06-20369972
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 33 / 34
Laatste Voorbeeld (sed)
$ cat sedscrs/\([A-Z][A-Z]*\){\([ˆ}]*\)}/\1<\2>/
$ cat ba{ab} A{d}aBc{aba} ABC(a) ABC{a}ab$ sed -f sedscr ba{ab} A<d>aBc{aba} ABC(a) ABC<a>ab
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 34 / 34
Laatste Voorbeeld (sed)
$ cat sedscrs/\([A-Z][A-Z]*\){\([ˆ}]*\)}/\1<\2>/$ cat ba{ab} A{d}aBc{aba} ABC(a) ABC{a}ab$ sed -f sedscr ba{ab} A<d>aBc{aba} ABC(a) ABC<a>ab
Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 34 / 34