Modulelessen (1/4)
Positieve vooruitblik: `(?=...)`
Een positieve vooruitblik (?=...) is een bewering van nulbreedte:
het controleert of een bepaald patroon de huidige positie volgt, maar doet dat wel
consumeer deze karakters niet.
Pattern: \d+(?= euro)
Sample: Prezzo 100 euro, sconto 25 euro, totale 75 dollari.
^^^ ^^De lookahead (?= euro) vereist dat de cijfers worden gevolgd door euro, maar
de wedstrijd bevat alleen de cijfers. 75 dollari komt niet overeen (geen euro).
Waarom "nulbreedte"
Beschouw de vooruitblik als een voorwaarde voor de positie, niet als een voorwaarde onderdeel van de wedstrijd:
- De wedstrijd stopt vóór de vooruitblik.
- De positie "na de wedstrijd" is het begin van de tekst die door de lookahead wordt geïnspecteerd.
- De volgende wedstrijdpoging met de vlag
gwordt vanaf daar hervat.
Dit maakt het perfect voor het extraheren van waarden zonder hun context: prijzen zonder de valuta, woorden vóór een leesteken, enzovoort.
Lookahead-functies en nulbreedtescan
De positieve vooruitkijk (?=...) garandeert dat het opgegeven patroon het huidige punt volgt, maar het scannen wordt hervat vanaf de positie vóór de vooruitkijk. Dit voorkomt dat delen van de tekst worden "gebruikt" die nodig kunnen zijn voor volgende overeenkomsten.
Probeer het
Extraheer ALLEEN de cijfers van de europrijzen (de reeks cijfers gevolgd door 'euro'). Geen valuta in de wedstrijd.
Toon hint
Verplaats 'euro' binnen een lookahead (?= euro): de string maakt geen deel uit van de match.
Oplossing beschikbaar na 3 pogingen
Oefening beoordelen
Vind elk woord onmiddellijk gevolgd door een dubbele punt `:` (maar zonder de dubbele punt in de overeenkomst op te nemen).
Toon hint
Dezelfde logica: de `:` zit niet in de match, maar het is een positievoorwaarde.
Oplossing beschikbaar na 3 pogingen
Extra uitdaging
Find every word (e.g. function name) followed immediately by an open parenthesis `(`, excluding the parenthesis from the match.
Toon hint
Verplaats \\( (ontsnapte open haakjes) binnen de positieve lookahead (?=...).
Oplossing beschikbaar na 3 pogingen