5. Opdracht 1
• Schrijf een regex waarmee je commandline-input
kunt matchen.
o mijn_script --param=5 -d -f
• Matches:
o --param=5
o -d
o -f
6. Praktijk: getallen
• [0-9]
o 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
• [1-9][0-9]*
o elke positieve integer
• [1-4]?[0-9]|5[0-5]
o 0 <= input >= 55
7. Opdracht 2
• IP(v4)-adressen zijn niet bijzonder lastig te matchen
• Vier octets tussen 0 en 255, zonder voorloopnullen
• 0.0.0.0
• 127.0.0.1
• 192.168.1.254
• 255.255.255.255
8. Opdracht 2 -- revisited
• Hé, dat komt me bekend voor…
o filter_var(‘127.0.0.1’, FILTER_FLAG_IPV4);
• Regexes zijn geen heilige graal
9. Praktijk: HTML
• DOMDocument…
• BBCode/UBB
• Simpel formaat: <naam attribuut=“waarde”>
o Beperkingen met regexes: een herhalend subpatroon kun je niet opslaan
• Noodzakelijke twee stappen
o Eerst een hele tag matchen
o Daarna apart de attributen eruit halen
10. Opdracht 3
• Schrijf twee regexes
o HTML-tags
o Attributen in HTML-tags
• Voor de durvers
o Schrijf een regex die een <img>-tag matcht en in het eerste subpatroon
de waarde van het src-attribuut bevat.
11. De vaakst voorkomende
fout
• .*
o Catastrofisch backtracken
• AUW!
• Wees specifiek
• Niet compleet overbodig
o ^[a-z]+#(.*)
• Simpel voorbeeld: tot aan het einde. Geen kans op backtracken
• Lazy-matchen: .*?
o Je kunt altijd specifiek zijn, dus onnodig.
12. Opdracht 4
• CSV-records
o Regel vinden waarvan het twaalfde veld met “P” begint
o ^(.*?,){11}P
• Wat gebeurt er… Als het twaalfde veld niet met “P”
begint?
• Herschrijf de regex zo dat hij altijd goed matcht.