home | sitemap

Reguliere expressies

Een reguliere expressie (afgekort tot "regexp", "regex" of "RE") is een manier om patronen te beschrijven waarmee een computer tekst kan herkennen. Er bestaat hiervoor een formele syntax, die grotendeels gestandaardiseerd is.

Reguliere expressies worden in veel (tekst)programma's gebruikt om stukken tekst te doorzoeken, te manipuleren of te valideren op basis van bepaalde patronen. Een eenvoudige variant van de reguliere expressie is in veel besturingssystemen te vinden als de jokertekens * en ? die gebruikt kunnen worden bij het zoeken naar bestandsnamen.

Een reguliere expressie omschrijft een verzameling karakters zonder ze allemaal op te noemen. De drie woorden Handel, Händel en Haendel kunnen bijvoorbeeld beschreven worden met het patroon "H(a|ä|ae)ndel".

Gewone letters en cijfers in de reguliere expressie herkennen hetzelfde teken in de te vinden tekenreeks. Een aantal tekens hebben speciale betekenis:

Deze basiselementen kunnen worden gecombineerd met de volgende constructies:

Kwantificatie

Een 'kwantor' achter een teken geeft aan hoe vaak dat teken voor mag komen. De meest voorkomende kwantoren zijn +, ? en *:

Groepering

Haakjes maken een eenheid van het patroon waar ze omheen staan, bijvoorbeeld "(va|moe)der" is hetzelfde als "vader|moeder" en "(groot)?vader" herkent zowel "vader" als "grootvader".
Al deze constructies kunnen gecombineerd worden in hetzelfde patroon, zodat "H(ae?|ä)ndel" hetzelfde is als "H(a|ae|ä)ndel".

Hoofdlettergevoelig

De controle is standaard hoofdlettergevoelig en een . staat voor elk teken, behalve een enter. Om een controle hoofdletterongevoelig te maken en/of de . ook te laten gelden voor een enter, kan aan het begin van de expressie een instructie worden meegegeven:

(?s): . staat ook voor een enter
(?i): hoofdletterongevoelig
(?is) of (?si): beide

Voorbeeld:
/[a-zA-Z]+/ controleert of de tekst 1 of meerdere gewone en/of hoofdletters bevat. /(?i)[a-z]+/ ook.

Voorbeelden

De reguliere expressies zoals gebruikt bij de standaard validaties worden hieronder bij wijze van voorbeeld toegelicht:

Alleen cijfers

/^\d*$/: ^ staat voor het begin en $ voor het eind, daar tussen mogen 0 of meer cijfers (0-9) voorkomen. 12345678 is bijv. goed, 1234a5678 niet.
Andere schrijfwijzen: /^[0-9]+$/, /^(0|1|2|3|4|5|6|7|8|9|0)+$/

Geldbedrag

/^-?\d+([,.]\d{2})?$/: een geldbedrag kan beginnen met een - (-?), gevolgd door 1 of meerdere cijfers (\d+), gevolgd door een . of , gevolgd door precies 2 cijfers, waarbij het hele stuk ([,.]\d{2}) mag vorkomen, want gevolgd door een ?.
Andere schrijfwijze voor alleen positieve bedragen waarbij centen verplicht zijn: /^\d+,\d\d$/

Geldig e-mailadres

/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/: in het kort een reeks van karakters al dan niet met een . gescheiden, gevolgd door een @, gevolgd door een reeks van karakters al dan niet met een . gescheiden, eindigend op 2 t/m 4 karakters (bijvoorbeeld .nl, .com of .info)

Geldige postcode

/^\d{4}\s*[a-zA-Z][a-zA-Z]$/: precies 4 cijfers (\d{4}) gevolgd door eventueel 1 of meerdere spaties, gevolgd door de 2 letters uit de reeks a-z.

Telefoonnummer

/^0\d{9}/: een reeks cijfers beginnend met een 0 gevolgd door nog 9 cijfers. Een wat 'lossere' validatie zou kunnen zijn: /^\d+-*\d+$/, cijfers, eventueel met een - en weer wat cijfers.