Wat Is een Reguliere Expressie? Een Volledige Uitleg
Snel antwoord
Een reguliere expressie is een patroon dat een set tekenreeksen beschrijft. Het gebruikt literal characters en metacharacters (*, +, ?, ., ^, $, [], (), {}, |, \) met speciale betekenissen. Regex wordt gebruikt voor validatie, zoeken, extractie en vervanging. Gebruik onze gratis Regex Tester om patronen te testen.
Invoering
Een reguliere expressie (regex of regexp) is een reeks tekens die een zoekpatroon definieert. Het patroon wordt gebruikt door string-search-algoritmes om tekst te vinden, matchen of vervangen. Reguliere expressies ontstonden in formele-taaltheorie in de jaren '50 en werden in de jaren '70 opgenomen in Unix-teksttools (grep, sed, awk). Vandaag is regex ingebouwd in vrijwel elke programmeertaal en teksteditor.
Stap voor stap
-
Begrijp letterlijke en metatekens
Letterlijke tekens (a, b, 1, @) komen overeen. Metatekens hebben een speciale betekenis: . komt overeen met elk teken, * betekent nul of meer, + betekent één of meer, ? betekent nul of één, ^ begint met wedstrijden, $ eindigt met wedstrijden.
-
Leer karakterlessen
Vierkante haken [] definiëren een tekenklasse: [aeiou] komt overeen met elke klinker, [0-9] komt overeen met elk cijfer, [^0-9] komt overeen met elk niet-cijfer. Verkorte klassen: \d (cijfer), \w (woordteken), \s (witruimte) en hun ontkenningen in hoofdletters.
-
Gebruik kwantificatoren
Kwantificatoren geven aan hoe vaak een patroon zich herhaalt: * (0+), + (1+), ? (0 of 1), {n} (precies n), {n,} (n+), {n,m} (n tot m). Standaard hebzuchtig; toevoegen ? voor luie matching (bijvoorbeeld *?).
-
Groeperen en ankeren
Haakjes () maken opnamegroepen aan. Afwisseling | komt overeen met beide kanten (kat|hond). Ankers ^ en $ komen overeen met het begin en einde van de tekenreeks. Gebruik deze om complexe patronen uit eenvoudigere patronen te bouwen.
Voorbeelden
Match een e-mailachtig patroon
Invoer: Pattern: [a-z]+@[a-z]+\.[a-z]+
Uitvoer: Matches: alice@example.com, bob@test.org
Overeenkomen met een telefoonnummerformaat
Invoer: Pattern: \d{3}-\d{3}-\d{4}
Uitvoer: Matches: 555-123-4567
Sleutel-waardeparen extraheren
Invoer: Pattern: (\w+)=(\w+)
Uitvoer: Matches 'key=value' with group 1 as key, group 2 as value
Veelvoorkomende problemen
- Hebzuchtige matching overconsumeert —.* matches zoveel mogelijk. Gebruik .*? voor luie matching om de kortste match te vinden.
- Vergeten speciale tekens te escapen —., *, +, ?, etc. zijn speciaal. Gebruik \ om ze letterlijk te matchen (bijvoorbeeld: \. komt overeen met een letterlijke punt).
- Catastrofale backtracking: patronen met geneste kwantoren (bijvoorbeeld (a+)+) kunnen bij bepaalde invoer exponentieel veel tijd in beslag nemen, waardoor ReDoS-aanvallen kunnen ontstaan.
- Overmatching: zonder ankers (^ en $) komt een patroon overal overeen. Gebruik ^...$ om de hele tekenreeks te matchen.
Tips
- Begin eenvoudig en voeg stapsgewijs de complexiteit toe: het in één keer debuggen van een complexe regex is erg moeilijk.
- Gebruik een regex-tester om te experimenteren met patronen aan de hand van voorbeeldtekst, zodat overeenkomsten in realtime worden gemarkeerd.
- Becommentarieer complexe regexes met behulp van de uitgebreide modus (/x vlag in sommige zoekmachines) of verdeel ze in benoemde delen.
- Gebruik onze Regex Tester om patronen direct in uw browser te testen - geen aanmelding, volledig privé.