Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The Language of Regular Expressions. So You Think You Can Speak It? by Rustam Mehmandarov
Search
Riga Dev Day
March 13, 2016
0
57
The Language of Regular Expressions. So You Think You Can Speak It? by Rustam Mehmandarov
Riga Dev Day
March 13, 2016
Tweet
Share
More Decks by Riga Dev Day
See All by Riga Dev Day
Faster Java by Adding Structs (Sort Of)
rigadevday
0
140
Prepare for JDK 9! by Dalibor Topic
rigadevday
0
100
Little Important Things in Distributed Architectures by Andres Jaan Tack
rigadevday
0
99
Oracle 12c for Developers by Alex Nuijten
rigadevday
1
110
Modern Java Component Design with Spring 4.3 by Juergen Hoeller
rigadevday
0
210
Open Source and OpenJDK: Do They Deliver? by Simon Ritter
rigadevday
0
47
Google Apps Integration in Oracle Apex by Richard Martens
rigadevday
0
240
Integration Testing from the Trenches by Nicolas Fränkel
rigadevday
0
190
Distributed Systems at ok.ru by Oleg Anastasyev
rigadevday
0
69
Featured
See All Featured
Art, The Web, and Tiny UX
lynnandtonic
288
19k
Imperfection Machines: The Place of Print at Facebook
scottboms
258
12k
Git: the NoSQL Database
bkeepers
PRO
422
63k
Fantastic passwords and where to find them - at NoRuKo
philnash
36
2.5k
Side Projects
sachag
451
41k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
39
4.4k
Raft: Consensus for Rubyists
vanstee
132
6.2k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
240
1.2M
Designing on Purpose - Digital PM Summit 2013
jponch
110
6.4k
Thoughts on Productivity
jonyablonski
57
3.8k
Building Your Own Lightsaber
phodgson
98
5.7k
Producing Creativity
orderedlist
PRO
336
39k
Transcript
The Language of Regular Expressions. So You Think You Can
Speak It? Rustam Mehmandarov Riga Dev Day
The Vision http://xkcd.com/208/
…but regex ain’t one! Oh, wait! http://xkcd.com/1171/
The Reality
None
(([0-9]{4})-([0-9]{2})-([0-9]{2})).*\sINFO\s(.*)
Log4j Log File
.*(INFO|WARN).*
.*(INFO|WARN).*
(([0-9]{4})-([0-9]{2})-([0-9]{2})).*ERROR(.*)
(([0-9]{4})-([0-9]{2})-([0-9]{2})).*ERROR(.*)
^.*192\.168\.0\.6[^9](.*)$
^.*192.168.0.6[^9](.*)
^.*192\.168\.0\.6[^9](.*)$
^.*192\.168\.0\.6[0-9]+[^9](.*)$
flavou?r
Recap: Quantifiers * + ? {num} {num, num}
Recap: Grouping .*(INFO|WARN)(.*) .*(INFO|WARN)(?:.*)
(WA) 2014-09-09 WAR FILE WARN [com.example.logging.MyLog]
(?=WARN)WA 2014-09-09 WAR FILE WARN [com.example.logging.MyLog]
(?=WARN)WA
Recap: Lookaround (?=foo) -> Lookahead (?<=foo) -> Lookbehind (?!foo) ->
Negative Lookahead (?<!foo) -> Negative Lookbehind
Lookahead: Example
The list
Backreferences
Backreferences (contd.)
Text: OSDC is awesome! HTML: OSDC is <em>awesome</em>! Regex: <.+>
Result:
Text: OSDC is awesome! HTML: OSDC is <em>awesome</em>! Regex: <.+?>
Result:
None
http://stackoverflow.com/questions/1732348/ regex-match-open-tags-except-xhtml-self- contained-tags
Quantifiers Revisited Greedy: *, +, ?, {num, num} Non-greedy: *?,
+?, ??, {num, num}?
Final Recap • Know your data! – Think what you
should match – Think what you should not match • Know your flavor • Know your engine (DFA, NFA) – Backtracking • Greediness • Non-capturing parenthesis • Anchors
MOAR! EXAMPLES!
Matching an IP - 1 Idea 1: ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ Result:
Matching an IP - 2 Idea 2: ^\d\d\d\.\d\d\d\.\d\d\d\.\d\d\d$ Result:
Matching an IP - 3 Idea 3: ^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$ Result:
Matching an IP - 4 Idea 4: ^ ([01]?\d\d?|2[0-4]\d|25[0-5])\. ([01]?\d\d?|2[0-4]\d|25[0-5])\.
([01]?\d\d?|2[0-4]\d|25[0-5])\. ([01]?\d\d?|2[0-4]\d|25[0-5]) $ Result:
Your New Reality! http://xkcd.com/208/
Thank you! rmehmandarov
[email protected]
None