13 d aan · CPU 6% · RAM 44% · Opslag 20% Alle systemen werken 99,79% beschikbaar (30 dagen) Status bekijken →
Handleidingen

Reguliere expressies voor beginners

Een reguliere expressie (regex) is een patroon waarmee je in tekst zoekt: alle IP-adressen in een logbestand, de regels die met een datum beginnen, of de getallen in een lang bericht. Het ziet er in het begin uit als een kat op het toetsenbord, maar met een handvol bouwstenen kom je een heel eind. Probeer ondertussen alles uit in de Regex-tester, die laat live zien wat er wordt gevonden.

De bouwstenen

Gewone letters en cijfers zoeken zichzelf: kat vindt “kat”. Speciale tekens geven je meer macht:

Tekens

Elk teken (behalve een nieuwe regel) .
Een cijfer \d
Een letter, cijfer of onderstreping \w
Een spatie, tab of nieuwe regel \s
Een van deze tekens [abc]
Een teken uit een reeks [a-z]
Alles behalve deze tekens [^abc]
Een echte punt (speciaal teken ontsnappen) \.

Hoe vaak?

Nul of meer keer *
Een of meer keer +
Nul of een keer (optioneel) ?
Precies drie keer {3}
Tussen een en drie keer {1,3}

Plaats en groepen

Begin van de regel ^
Einde van de regel $
Grens van een woord \b
Een groep (en het gevonden deel onthouden) (abc)
Een groep zonder te onthouden (?:abc)
Het een of het ander kat|hond

Een patroon stap voor stap opbouwen

Stel, je wilt een datum als 2026-10-28 vinden. Bouw het in kleine stappen:

  1. Een jaar is vier cijfers: \d{4}
  2. Dan een streepje: -
  3. Maand en dag zijn elk twee cijfers: \d{2}-\d{2}

Samen: \d{4}-\d{2}-\d{2}. Wil je alleen regels die met een datum beginnen, zet er een ^ voor.

Voorbeelden uit het beheerdersleven

Wat zoek je? Patroon
Een IPv4-adres (globaal) \b(?:\d{1,3}\.){3}\d{1,3}\b
Een MAC-adres (?:[0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}
Een datum (jjjj-mm-dd) \d{4}-\d{2}-\d{2}
Regels met “error” of “warning” error|warning
Een poortnummer na een dubbele punt :(\d{1,5})\b
Lege regels ^$

Het IPv4-patroon is globaal: het vindt ook 999.999.999.999. Voor het vinden van adressen in een log is dat prima. Voor het controleren van invoer is een regex niet het beste gereedschap.

Gulzig en lui

Standaard zijn * en + gulzig: ze nemen zoveel mogelijk. In de tekst <b>een</b> en <b>twee</b> vindt <b>.*</b> alles van de eerste <b> tot de laatste </b>. Zet je een vraagteken erachter, <b>.*?</b>, dan werkt het lui en vind je elk stuk apart.

Regex op de opdrachtregel

Met grep pas je een patroon toe op een bestand. Welke syntaxis werkt, hangt van de optie af:

grep -E "error|warning" /var/log/syslog        # uitgebreide syntax
grep -E "[0-9]{1,3}(\.[0-9]{1,3}){3}" access.log   # IP-adressen
grep -P "\d{4}-\d{2}-\d{2}" app.log               # Perl-syntax, met \d

Let op: \d werkt in grep -P maar niet in grep -E. Gebruik daar [0-9] of [[:digit:]]. Een commando samenstellen met uitleg per onderdeel doe je met de grep-bouwer, en speciale tekens in tekst veilig maken voor JSON, shell of regex kan met Escape en unescape.

Verschillende programma’s (grep, JavaScript, Python, sed) gebruiken net iets andere varianten van regex. De basis hierboven werkt overal, maar test het patroon altijd in het programma dat je werkelijk gebruikt.

Veelgemaakte fouten

  • Een punt niet ontsnappen. 192.168.1.1 vindt ook 192x168y1z1. Schrijf 192\.168\.1\.1.
  • Te gulzig. .* neemt vaak meer dan je wilt. Probeer .*? of een uitgesloten teken: [^"]* vindt alles tot het eerstvolgende aanhalingsteken.
  • Geen anker. Zonder ^ en $ vindt een patroon ook een stukje in het midden.
  • Ingewikkelde patronen voor een e-mailadres of URL. Dat wordt snel onleesbaar en nog steeds niet waterdicht. Gebruik voor invoercontrole de functie van je programmeertaal.
  • Geneste herhalingen zoals (a+)+. Op lange tekst kunnen ze extreem traag worden (“catastrophic backtracking”). Houd patronen eenvoudig.

Kort samengevat

  • Bouw een patroon op uit kleine stukjes en test elk stuk.
  • \d, \w, . en [...] zeggen wat, *, +, ? en {n} zeggen hoe vaak.
  • ^ en $ leggen vast waar.
  • Test in de Regex-tester voordat je het in een script zet.