Direct naar de hoofdinhoud
Module 4 · Les 3 van 415/32 in de cursus~10 min
Modulelessen (3/4)

Niet-vastleggende groepen: `(?:...)`

Vaak zijn haakjes alleen nodig om te groeperen (kwantificeren, afwisselen) en NIET om de waarde te extraheren. Gebruik in dat geval de non-capturing versie: (?:...). Het werkt op dezelfde manier als (...) maar maakt geen creatie een genummerde groep.

Code
Pattern: (?:https?)://(\w+\.\w+)
Sample:  https://example.com e http://test.org
Match e gruppi:
  match  = "https://example.com"   gruppo1 = "example.com"
  match  = "http://test.org"        gruppo1 = "test.org"

(?:https?) groepeert het schema om de ? kwantor toe te passen, maar wij zijn niet geïnteresseerd in het extraheren van https als groep: groep 1 is direct de domein.

Waarom het gebruiken

  1. Leesbaarheid: de lezer begrijpt meteen dat de groep er alleen voor is structuur, niet om er een waarde uit te halen.
  2. Prestaties: de engine hoeft de wedstrijd van de groep niet op te slaan.
  3. Schone nummering: genummerde groepen blijven op één lijn "informatie die ik echt nodig heb", zonder tussenkomst.

Optimaliseren met niet-vastleggende groepen

Het gebruik van (?:...) vertelt de engine om groeperings- en kwantificatieregels toe te passen zonder geheugen te verspillen bij het opslaan van tussentijdse wedstrijdresultaten. Dit wordt ten zeerste aanbevolen bij zware lussen of bij zeer lange tekstverwerking.

Probeer het

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

Extraheer het domein (`example.com`, `test.org`...) uit elke URL in de tekst. Gebruik `(?:https?)` voor het protocol (u hoeft het niet vast te leggen) en een enkele groep voor het domein.

Editor laden…
Toon hint

Wijzig de eerste groep van (https?) in (?:https?): u hoeft deze niet vast te leggen, u wilt alleen het domein.

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

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

Zoek elke herhaling van `ab` als een enkele match, maar ZONDER de groep vast te leggen (aangezien je alleen de hele match nodig hebt).

Editor laden…
Toon hint

Dezelfde syntaxis als de vorige les, maar met (?:ab)+ in plaats van (ab)+.

Oplossing beschikbaar na 3 pogingen

Extra uitdaging

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

Find price digits followed optionally by decimal parts inside a non-capturing group, e.g. `100` or `100.50`.

Editor laden…
Toon hint

Gebruik (?:\\.\\d{2})? om het decimale deel optioneel te maken zonder het vast te leggen.

Oplossing beschikbaar na 3 pogingen