Direct naar de hoofdinhoud
Module 6 · Les 4 van 424/32 in de cursus~12 min
Modulelessen (4/4)

Rondkijken in de praktijk

Laten we alle vier de vormen van lookaround samenbrengen in scenario's uit de echte wereld. Lookarounds schitteren wanneer u:

  1. Extraheer een waarde zonder de context die deze identificeert.
  2. Valideren een tekenreeks op basis van meerdere onafhankelijke voorwaarden.
  3. Filter overeenkomsten die aan bepaalde voorwaarden voldoen, maar niet aan andere.

Wachtwoordvalidatie

Code
Pattern: ^(?=.*[A-Z])(?=.*\d)(?=.*[^a-zA-Z\d]).{8,}$
Checks:
  - at least one uppercase     (?=.*[A-Z])
  - at least one digit         (?=.*\d)
  - at least one symbol        (?=.*[^a-zA-Z\d])
  - minimum length 8           .{8,}

Bij elke lookahead wordt één voorwaarde gecontroleerd, beginnend bij het begin (^). Dat zijn ze allemaal nul-breedte: de motor blijft op stand 0 en verbruikt dan mee BESCHERMD_INLINE_1.

Extractie tussen scheidingstekens

Code
Pattern: (?<=\().+?(?=\))
Sample:  Funzione foo(bar) e baz(qux, qix)
Match: "bar", "quux, qix" (without parentheses)

Lookbehind + lookahead + lazy quantifier: extraheert de inhoud binnenin de haakjes zonder deze op te nemen.

Combineer vooruit en achteruit kijken

Door lookahead en lookbehind samen te gebruiken, kunnen tekenreeksen worden geïsoleerd die binnen specifieke tags of formaten liggen (bijvoorbeeld tekst extraheren tussen twee tags zonder de tags op te nemen in de uiteindelijke overeenkomst). Dit voorkomt daaropvolgende opschoonbewerkingen voor tekenreeksen.

Probeer het

Oefening#regex.m6.l4.e1
Pogingen: 0Laden…

Haal de waarde van elke `sleutel=waarde`-toewijzing uit het logbestand: ALLEEN de waarden (geen sleutels, geen `=`). Waarden kunnen letters en cijfers bevatten.

Editor laden…
Toon hint

Verplaats `=` binnen een lookbehind (?<==): op deze manier bevat de match alleen de waarde.

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#regex.m6.l4.e2
Pogingen: 0Laden…

Zoek welke woorden minimaal EEN hoofdletter EN minimaal EEN cijfer hebben (in willekeurige volgorde), door ze in de tekst te lokaliseren.

Editor laden…
Toon hint

Dubbele vooruitblik aan het begin: (?=\\w*[A-Z])(?=\\w*\\d). Gebruik dan het woord met \\w+.

Oplossing beschikbaar na 3 pogingen

Extra uitdaging

Oefening#regex.m6.l4.e3
Pogingen: 0Laden…

Extract only numerical digits that are enclosed exactly between parentheses, e.g. extract `102` from `(102)` without capturing the parentheses.

Editor laden…
Toon hint

Combine a positive lookbehind (?<=\( ) for the open parenthesis and a positive lookahead (?=\) ) for the closed one.

Oplossing beschikbaar na 3 pogingen