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

57
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

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

Page 1: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 2: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 3: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 4: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 5: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 6: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 7: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 8: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 9: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 10: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 11: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 12: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 13: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 14: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 15: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 16: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 17: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 18: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 19: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 20: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 21: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 22: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 23: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 24: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

ABNF: Basic operators

ConcatenationAlternativesRepetition (variable)GroupingComments

Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 16 / 34

Page 25: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 26: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 27: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 28: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 29: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 30: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 31: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

ABNF: More operators

Incremental alternativeValue rangesOptional presenceSpecific repetition

Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 22 / 34

Page 32: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 33: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 34: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 35: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 36: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 37: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 38: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 39: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 40: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 41: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 42: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 43: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 44: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 45: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 46: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 47: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

$ 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

Page 48: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 49: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 50: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 51: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 52: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 53: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 54: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

Emailadres:

[A-Za-z0-9_-]+([.]{1}[A-Za-z0-9_-]+)*@[A-Za-z0-9-]+([.]{1}[A-Za-z0-9-]+)+

[email protected]

Mobiel nummer:

ˆ06[-]?[0-9]{8}$

06-20369972

Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 33 / 34

Page 55: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

Emailadres:

[A-Za-z0-9_-]+([.]{1}[A-Za-z0-9_-]+)*@[A-Za-z0-9-]+([.]{1}[A-Za-z0-9-]+)+

[email protected]

Mobiel nummer:

ˆ06[-]?[0-9]{8}$

06-20369972

Mark van der Zwaag (PRG, UvA) ESA5a 7 oktober 2006 33 / 34

Page 56: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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

Page 57: ESA College 5b - os3.nl fileReguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord), die, volgens bepaalde syntaxregels, een verzameling

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