Regexes
Online help & Tools
Various Patterns
# MAC Address:
^([0-9a-zA-Z]{2}[:-]){5}([0-9a-zA-Z]{2})$
([0-9a-zA-Z]{2}[:-]){5}
([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])
# IP Address:
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
(\d(.+?).\d(.+?).\d(.+?).)
(\d+.\d+.\d+.\d+)
# DOMAIN:
([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}
(\w+://\w{3}.\w+.\w{3})
(\w+://\w{3}.\w+.\w+.\w{3})
# DATE:
(19|20)\d\d([- /.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])
(\d{4}/\d{2}/\d{2})
# TIME:
(\d{2}:\d{2}:\d{2})
# EMAIL:
^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$
(\w+.\w+@\w+.\w{1,3})
# Clear text
[^\w"',:;\.=\-\(\)\'\}~_%\\\$\s\[\]@\?<>€#/]
Optimisation
Au préalable
Type de donnée à parser
Voici des exemples afin d'extraire certain type d'information
Localiser la valeur
ex : username=xavier action=regex
regex username=(\w+) S'il y a plusieurs description de valeur identique dans le log et qu’on veut le dernier
ex :
username=xavier action=regex cible username=patrick action=lire
ex : 20181009,1.1.1.1,14789,xyzp,2.2.2.2,445,exploitms10-017
Alors chercher une valeur de référence dans le log comme une IP suivi d’une suite de chiffres :
regex : [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3},\d+,(\w+)
Diverses expressions
^ debut de ligne
$ fin de ligne
\d digit
\D non digit
\s espace
\S non espace
\w word [a-z-A-Z0-9_]
\W non word
[ ] choix multiple
{n} nombre d'occurences
+ 1 ou X fois
* 0 ou x fois
? 0 ou x fois, en mode "lazy"
Exemple d'impact
Regex : account="(.*?)" -> 41900 steps -> etalon
Regex : account="([^"]+?)" -> 39998 steps
Regex : account="([^"]+)" -> 28856 steps
Regex : account="([^"]+) -> 27635 steps -> meilleur choix
Enfin, en cas de problème coté build sur une regex, le noter et le RUN pourra vous aider ou vous pouvez contacter Xavier Thouroude ainsi que Florent Gontharet.
Rendre "lazy" (= mettre "?" à la suite d'un sélecteur) n'est pas toujours rentable
Regex:
action="(.*)" action="(.*?)"
Debug:
Beginning match attempt at char 15 Beginning match attempt at char 15
1 a 1 a
2 ac 2 ac
3 act 3 act
4 acti 4 acti
5 actio 5 actio
6 action 6 action
7 action= 7 action=
8 action=" 8 action="
9 action="regex" 9 action=" ok
10 action="regex" 10 action=" ok
11 action="regex"backtrack 11 action=" backtrack
12 action="regex 12 action="r
13 action="regex 13 action="r
14 action="regex" 14 action="r backtrack
Match found in 14 steps 15 action="re
16 action="re
17 action="re backtrack
18 action="reg
19 action="reg
20 action="reg backtrack
21 action="rege
22 action="rege
23 action="rege backtrack
24 action="regex
25 action="regex
26 action="regex"
Match found in 26 steps
Pour aller plus loin
www.loggly.com/blog/regexes-the-bad-better-best/
www.loggly.com/blog/five-invaluable-techniques-to-improve-regex-performance/
www.expreg.com/optimisation.php
www.rexegg.com/regex-optimizations.html