Regex voor beginners: hoe schrijf je reguliere expressies
Regex voor beginners
Reguliere expressies — regex — zijn patronen die tekst beschrijven. Met regex kun je tekenreeksen doorzoeken, invoer valideren, gegevens extraheren en complexe zoek-en-vervangbewerkingen uitvoeren met één compacte expressie. Zodra je de basisbeginselen begrijpt, wordt regex een van de krachtigste hulpmiddelen in je programmeertoolkit.
Wat is een reguliere expressie?
Een regex is een reeks tekens die een zoekpatroon definieert. Patroon \d{3}-\d{2}-\d{4} matcht een Amerikaans burgerservicenummer: drie cijfers, koppelteken, twee cijfers, koppelteken, vier cijfers.
Regex-engines bestaan in vrijwel elke programmeertaal — JavaScript, Python, Java, Ruby, Go — allemaal met ingebouwde ondersteuning.
Letterlijke tekens
De meeste tekens matchen zichzelf. Het patroon cat matcht de letterlijke tekenreeks "cat" waar deze ook voorkomt.
Pattern: cat
Matches: "cat" in "The cat sat on the mat."
Matches: "cat" in "catalog"
Letterlijk matchen is eenvoudig maar beperkt. De echte kracht komt van metatekens.
Metatekens
Deze tekens hebben een speciale betekenis en moeten met \ worden geëscaped om ze letterlijk te matchen:
. ^ $ * + ? { } [ ] \ | ( )
Tekensets
Tekensets matchen één teken uit een verzameling.
Vierkante-hakennotatie
| Patroon | Overeenkomsten |
|---------|---------|
| [aeiou] | Elke klinker |
| [0-9] | Elk cijfer |
| [a-zA-Z] | Elke letter |
| [^0-9] | Elk teken dat GEEN cijfer is |
Vooraf gedefinieerde sets
| Afkorting | Beschrijving |
|-----------|-------------|
| \d | Elk cijfer (gelijk aan [0-9]) |
| \w | Letter, cijfer of underscore |
| \s | Spatie, tab, nieuwe regel |
| \D | Elk niet-cijfer |
| \W | Elk niet-woordteken |
| \S | Elke niet-whitespace |
| . | Elk teken behalve nieuwe regel |
Kwantoren
Kwantoren bepalen hoe vaak het voorgaande element moet voorkomen.
| Kwantor | Betekenis | Voorbeeld | Overeenkomsten |
|------------|---------|---------|---------|
| * | Nul of meer | a* | "", "a", "aa" |
| + | Een of meer | a+ | "a", "aa", "aaa" |
| ? | Nul of één | colou?r | "color", "colour" |
| {3} | Precies N | \d{3} | "123" |
| {2,4} | Tussen N en M | \d{2,4} | "12", "123", "1234" |
Voorbeelden
\d+ → "42" in "Answer is 42"
https?:// → "http://" and "https://"
Ankers
Ankers matchen posities, niet tekens.
| Anker | Betekenis |
|--------|---------|
| ^ | Begin van de tekenreeks |
| $ | Einde van de tekenreeks |
| \b | Woordgrens |
| \B | Niet-woordgrens |
^hello → matches "hello" only at the start
end$ → matches "end" only at the end
\bword\b → matches "word" as a whole word, not inside "sword"
Groepen en alternatie
Vangende groepen ( ) extraheren overeenkomende delen:
(\d{3})-(\d{4}) → "555-1234", captures "555" in group 1, "1234" in group 2
Niet-vangende groepen (?: ) groeperen zonder te extraheren:
(?:https?|ftp):// → "http://", "https://", "ftp://"
Alternatie | fungeert als OF:
cat|dog|bird → matches "cat", "dog", or "bird"
Praktische regex-voorbeelden
| Gebruiksscenario | Patroon |
|----------|---------|
| Amerikaanse telefoon | \d{3}-\d{3}-\d{4} |
| E-mail (eenvoudig) | \S+@\S+\.\S+ |
| IP-adres | \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} |
| Hashtag | #[a-zA-Z]\w* |
| Tijd (HH:MM) | [01]\d|2[0-3]:[0-5]\d |
Een regex-patroon testen
Test patronen altijd interactief:
- Voer je regex-patroon in.
- Voer een testtekenreeks in.
- Bekijk welke delen in realtime matchen.
- Pas aan en herhaal.
Gebruik de regex-testertool om met patronen te experimenteren. Deze markeert overeenkomsten, toont vangende groepen en helpt je precies te begrijpen wat elk onderdeel van je expressie doet.