ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is...

Post on 07-May-2019

226 views 0 download

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-]+)+

J.P.Dijkman@uva.nl

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-]+)+

J.P.Dijkman@uva.nl

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