Regular Expressions

22 april 2017|Computer|2 Reacties

Met behulp van regular expressions kun je eenvoudig informatie vinden in een tekst. Voor je meeste zoek opdrachten zal een simpele ‘search’ volstaan, maar zodra je geen 1:1 zoek-patroon hebt bieden regular expressions een uitkomst. Ik heb regular expressions o.a. gebruikt in mijn vorige blog waarbij ik uitlegde hoe ik de gaswaarde uit de byte-stream van mijn slimme meter uitlees.

Bij regular expressions is alles een patroon. Wanneer je zoekt naar de string “zoek” dan zoek je in feite naar een patroon dat opgebouwd is uit de karakters z, o, e en k.

Meta karakters

Als je niet alle zoek karakters weet of onbekend zijn dan kun je zogenaamde meta karakters gebruiken:

Voorbeelden
zoek[01234] matcht met “zoek1”, “zoek3”, maar niet met “zoek6”
zoek[0-4] doet hetzelfde
zoek[0-9a-zA-Z] matcht met “zoek” gevolgd door elk willekeurig numeriek of alfanumeriek karakter

Om speciale karakters te vinden moet je deze vooraf laten gaan door een \

Macro’s

Vaak kun je macro’s gebruiken voor je regular expression. Het is afhankelijk van je applicatie welke macro’s worden ondersteund.

Quantifiers

Naast voorgaande zaken is het soms handig als je kunt aangeven hoe vaak een bepaalde template moet voorkomen. Daarvoor kun je zogenaamde quantifiers gebruiken:

Voorbeeld:
z+oek matcht met “zoek” en “zzzoek”
zo?ek matcht met “zoek” en “zooek” maar niet met “zoooek”
z.*k matcht alles wat begint met een ‘z’ en eindigt op ‘k’
zoek[0-9]{3} matcht met “zoek123”, “zoek456” maar niet met “zoek1000”

Anchors

Vaak wil je ook aangeven op welke positie iets begint. Je geeft dit aan door middel van zogenaamde anchors.

Alternatieven

Soms wil je iets aanduiden met een “of” operator : zoek naar “zoek” of “vind”. Dit doe je met het “|” teken. Let erop dat er geen spaties tussen staan

Voorbeeld:
zoek|vind : matcht met “zoek” en “vind”

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”.

Voorbeeld:
/([0-9]{4}([- ])*){2}[0-9]{4}/ : matcht een nummer bestaande uit 12 digits gegroepeerd in 3 delen (elk 4 digits) gescheiden door optionele “-” of ” “.

Zoek en vervang

Zoeken en vervangen gaat ook heel eenvoudig. Stel je wilt “zoek” vervangen door “vervang”. Je schrijft dan “s/zoek/vervang/g”. De ’s’ staat dan voor ‘substitute’ en de ‘g’ staat voor ‘global’.

Voorbeeld:
s/ / /g : verander een of meer spaties in een enkele spatie
s/ *$/ /g : haal alle spaties aan het einde van een regel weg
s/^/ /g : voeg een spatie toe aan het begin van elke regel
s/^[0-9][0-9]
//g : haal alle nummers aan het begin van elke regel weg

Het bovenstaande is slechts een zeer summiere uitleg wat er allemaal kan met regular expressions en zeker niet volledig. Je kunt nog zoveel meer (denk aan backreferences, modifiers, etc). Dit is een goede site om meer over regular expressions te leren en te experimenteren en zou ik zeker eens bekijken. Veel plezier!

avatar
2000
Foto en Image Files
 
 
 
Audio en Video Files
 
 
 
Andere File Types
 
 
 
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
Henri MatthijssenAC Recent comment authors

AC
Gast
AC

voorbeeld van z+oek matcht met “zoek” en “zoooek” – moet bijv. zijn zzzoek ipv zoooek

Henri Matthijssen
Gast

Je hebt gelijk. Ik het het meteen aangepast.