Regex -- Turku Agile Day 011

75
© blog.staffannoteberg.com (1) Regex Habits Abstract Machine

description

Regex -- Turku Agile Day 011

Transcript of Regex -- Turku Agile Day 011

Page 1: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (1)Regex Habits

Abstract Machine

Page 2: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (2)Regex Habits

Glob

Page 3: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (3)Regex Habits

Origin

Page 4: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (4)Regex Habits

Functions

Page 5: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (5)Regex Habits

Architecture

Page 6: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (6)Regex Habits

Directed Graph (nondeterministic)

Page 7: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (7)Regex Habits

Alphabet

Page 8: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (8)Regex Habits

States

Page 9: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (9)Regex Habits

Transition Table

Page 10: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (10)Regex Habits

Nondeterministic Finite Automata (NFA)

Page 11: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (11)Regex Habits

Directed Graph (DFA/NFA)

Page 12: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (12)Regex Habits

Deterministic Finite Automata (DFA)

Page 13: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (13)Regex Habits

Regular Expressions

Page 14: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (14)Regex Habits

Matching One Character

Page 15: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (15)Regex Habits

Operator #1: Concatenation

Page 16: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (16)Regex Habits

Operator #2: Kleene Star

Page 17: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (17)Regex Habits

Operator #3: Alternation

Page 18: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (18)Regex Habits

Quiz #1

Keskiviikko|(Maanan|Tiis|Tors| Perjan|Lauan|Sunnun)tai

Page 19: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (19)Regex Habits

Parentheses

Page 20: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (20)Regex Habits

Quiz #2

saippuakivikauppias

Page 21: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (21)Regex Habits

Finite

Page 22: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (22)Regex Habits

Regular Regex?

Page 23: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (23)Regex Habits

Greedy (Kleene Star)

Page 24: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (24)Regex Habits

Backtracking (NFA)

Page 25: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (25)Regex Habits

Leftmost (NFA Alternation)

Page 26: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (26)Regex Habits

Dialects

Page 27: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (27)Regex Habits

Regex Literal

Page 28: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (28)Regex Habits

Architecture

Page 29: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (29)Regex Habits

Regex Objects

Page 30: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (30)Regex Habits

Match Object

Page 31: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (31)Regex Habits

Quantifiers

Page 32: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (32)Regex Habits

Quiz #3

(0|1|2)(0|1|2|3|4|5|6|7|8|9){2}

Page 33: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (33)Regex Habits

Quantifier algebra

Page 34: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (34)Regex Habits

Positive Closure over Closure

Page 35: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (35)Regex Habits

Character Class

Page 36: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (36)Regex Habits

Quiz #4

[a-z0-9._-]+@[a-z0-9.-]+\.[a-z]{2,6}

Page 37: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (37)Regex Habits

Quiz #5

25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]

Page 38: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (38)Regex Habits

Metacharacters – shorthands

Page 39: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (39)Regex Habits

Quiz #6

2(0|1)\d\d1

Page 40: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (40)Regex Habits

Quiz #7

(0|(00|\+)358)(4\d|50)\d{7}

Page 41: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (41)Regex Habits

Metacharacters – dot

Page 42: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (42)Regex Habits

Economical use of Dot

Page 43: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (43)Regex Habits

Quiz #8

.+@.+

Page 44: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (44)Regex Habits

Metacharacters – Unicode

Page 45: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (45)Regex Habits

Quiz #9

\d+(,\d\d)?\s?\u20AC

Page 46: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (46)Regex Habits

Assertions – Anchor

Page 47: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (47)Regex Habits

Quiz #10

^\s+

\s+$

Page 48: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (48)Regex Habits

Assertions – Lookaround

Page 49: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (49)Regex Habits

Quiz #11

^(?=.*\d)(?=.*([a-zA-Z])).{8,40}$

Page 50: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (50)Regex Habits

Mode

Page 51: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (51)Regex Habits

Capture and Backreference

Page 52: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (52)Regex Habits

Quiz #12

<(\w+)[^>]*>[^<]*</\1>

Page 53: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (53)Regex Habits

Lazy Quantifiers

Page 54: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (54)Regex Habits

Web Test bench

Page 55: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (55)Regex Habits

REPL Test bench

Page 56: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (56)Regex Habits

Test-driven development

Page 57: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (57)Regex Habits

Study data source

Page 58: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (58)Regex Habits

Accept some incorrect

Page 59: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (59)Regex Habits

Deny some correct

Page 60: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (60)Regex Habits

Simple method

Page 61: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (61)Regex Habits

Shrink or Expand

Page 62: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (62)Regex Habits

Split

Page 63: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (63)Regex Habits

Blend imperative and regex

Page 64: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (64)Regex Habits

Context unaware

Page 65: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (65)Regex Habits

Consider Regex modes

Page 66: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (66)Regex Habits

Regex Inject Attack

Page 67: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (67)Regex Habits

Documentation

Page 68: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (68)Regex Habits

Use Lazy Quantifiers

Page 69: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (69)Regex Habits

Fail fast

Page 70: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (70)Regex Habits

Compile only once

Page 71: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (71)Regex Habits

Minimize Nested Quantifiers

Page 72: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (72)Regex Habits

Boundaries in find

Page 73: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (73)Regex Habits

Applications

Page 74: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (74)Regex Habits

Resources

Page 75: Regex -- Turku Agile Day 011

© blog.staffannoteberg.com (75)Regex Habits

Staffan Nöteberg

Book:Pomodoro Technique Illustratedwww.pomodoro-book.com

Twitter: staffannoteberghttp://blog.staffannoteberg.com