Direct naar de hoofdinhoud
Module 1 · Les 3 van 43/32 in de cursus~8 min
Modulelessen (3/4)

Het jokerteken: de punt `.`

De punt . in regex is het wildcard: het komt overeen met een enkele teken\u2026 met één belangrijke uitzondering: het komt NIET overeen met de nieuwe regel (\n).

Code
Pattern: c.t
Sample:  cat cot cut c@t c\nt
         ^^^ ^^^ ^^^ ^^^

Drie letters: een c, een willekeurig teken, een t. Geen nieuwe regel ertussen, dus c\nt komt niet overeen (standaard).

De punt is uiterst nuttig, maar ook gevaarlijk: gebruikt zonder discipline vangt meer op dan je bedoelde. Gecombineerd met de kwantoren in module 2 (.*, .+?) het is de bron van 90% van de patronen die "niet werken zoals ik verwacht".

De s vlag: "dotAll"

Met de vlag s (ook wel dotAll of single-line genoemd) komt de punt overeen elk teken, inclusief nieuwe regel. Handig om blokken te extraheren die overspannen meerdere lijnen.

Code
Pattern: <p>.*</p>
Flag:    gs
Sample:  <p>prima\nseconda</p>
         ^^^^^^^^^^^^^^^^^^^^^

Limieten en gedrag van het puntjokerteken

De punt . is een krachtig jokerteken, maar komt standaard niet overeen met nieuweregeltekens (\\n). Als je wilt dat de punt absoluut met alles overeenkomt, inclusief nieuwe regels, moet je de vlag s (dotAll) inschakelen. Wees voorzichtig bij het combineren van de punt met kwantoren (.*), omdat deze de neiging heeft te veel tekst te verbruiken (hebzuchtig gedrag).

Probeer het

Oefening#regex.m1.l3.e1
Pogingen: 0Laden…

Zoek elk drietal tekens, gescheiden door haakjes, b.v. `(abc)`, `(xyz)`. Gebruik het jokerteken voor de 3 binnenste tekens.

Editor laden…
Toon hint

Drie punten voor drie willekeurige tekens. De haakjes zijn metatekens: ze moeten worden geëscaped met \\.

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#regex.m1.l3.e2
Pogingen: 0Laden…

Extraheer het blok tussen `[INIZIO]` en `[FINE]`, dat meerdere regels kan bestrijken. Je hebt de vlag `s` nodig, zodat de punt ook overeenkomt met nieuwe regels, en de 'luie' versie van de kwantor (`.*?`, module 2).

Editor laden…
Toon hint

Zonder de s-vlag stopt de punt aan het einde van de regel: voeg deze toe. Het formulier .*? (lui) stopt de wedstrijd bij de eerste [FINE].

Oplossing beschikbaar na 3 pogingen

Extra uitdaging

Oefening#regex.m1.l3.e3
Pogingen: 0Laden…

Find all 3-character sequences starting with `c` and ending with `t` (e.g. `cat`, `cot`, `c-t`).

Editor laden…
Toon hint

Het patroon gebruikt de punt '.' om het middelste jokerteken weer te geven.

Oplossing beschikbaar na 3 pogingen