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:
- Extraheer een waarde zonder de context die deze identificeert.
- Valideren een tekenreeks op basis van meerdere onafhankelijke voorwaarden.
- Filter overeenkomsten die aan bepaalde voorwaarden voldoen, maar niet aan andere.
Wachtwoordvalidatie
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
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
Haal de waarde van elke `sleutel=waarde`-toewijzing uit het logbestand: ALLEEN de waarden (geen sleutels, geen `=`). Waarden kunnen letters en cijfers bevatten.
Toon hint
Verplaats `=` binnen een lookbehind (?<==): op deze manier bevat de match alleen de waarde.
Oplossing beschikbaar na 3 pogingen
Oefening beoordelen
Zoek welke woorden minimaal EEN hoofdletter EN minimaal EEN cijfer hebben (in willekeurige volgorde), door ze in de tekst te lokaliseren.
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
Extract only numerical digits that are enclosed exactly between parentheses, e.g. extract `102` from `(102)` without capturing the parentheses.
Toon hint
Combine a positive lookbehind (?<=\( ) for the open parenthesis and a positive lookahead (?=\) ) for the closed one.
Oplossing beschikbaar na 3 pogingen