U bent hier » http://www.goudappel.org/ onderwijs/ informatica/ IEEE testplan.php

Reguliere expressies voor noobs en andere newbies

Zoeken en vervangen ken je al van hele woorden of zinnen
maar als je iets zoekt waarvan je niet weet hoe het eruit ziet dan wordt het lastiger
bijvoorbeeld zoek een e-mail adres of een hyperlink of een achternaam etc.

Zoeken naar structuren in teksten doe je met reguliere expressies,
die lijken altijd heel moeilijk omdat er zulke rare tekens gebruikt worden.
Dat is logisch omdat de dingen die je zoekt uit leesbare tekst bestaan!

Dit document is er niet als leerboek bedoeld , maar als naslagwerk / spiekbriefje.

Als je een reguliere expressie hardop voorleest en je gebruikt de juiste begrippen dan vertelt het verhaal zichzelf.

Waar kun je naar zoeken? (karakter klassen)
\s een teken dat geen inkt kost (spatie, tab, nieuwe regel) (\S alle tekens die je kunt printen)
\dcijfer (\D alles behalve cijfers)
\wwoord (alles tussen spaties, begin van een regel, eind van een regel)
halloLetterlijke tekens (case sensitive tenzij de /i (insensitive) wordt gebruikt)
[a-z] [A-Z] [0-9] [aeiouy]groepen van toegestane tekens (bv onderkast klinkers) of het tegenovergestelde ([^a-z] [^A-Z] [^0-9] [^aeiouy])
(hallo | hoi)groepen van toegestane tekencombinaties (hallo of hoi)
.elk teken behalve nieuwe regel (tenzij /s (single line) wordt gebruikt)
Hoeveel matches? (quantifiers)
*0 maal of vaker (komt misschien voor)
+1 maal of vaker (komt zeker voor)
?0 of 1 maal (zo min mogelijk)
{3}precies 3 maal
{3,}3 maal of vaker
{3,5}3,4 of 5 maal
Groepen
(xxxx)een groep die wordt opgeslagen in een variabele  of $1 of een hoger getal
(?:xxxxx)een groep die niet wordt opgeslagen in een variabele
Escaping
\escape
^()[]{}.*+?\|/<>tekens die ge-escaped moeten worden als je ze letterlijk wilt vinden, omdat ze een betekenis kunnen hebben binnen reguliere expressies
Modifiers
gglobal
icase insensitive
salles als 1 regel beschouwen (dus zonder newlines)
Voor iets meer gevorderden:
^ of \Abegin van een regel
$ of \Zeind van een regel
\<begin van een woord
\>eind van een woord
Nog een paar
$`voor de match
$'na de match
$&de hele match
?#comment (als /x gebruikt wordt)
Zo, dus nu weet je de meest voorkomende dingen (ongeveer de helft van het geheel van mogelijkheden, dus het valt wel mee)
Betere tekstverwerkers/editors, php, javascript maar vooral PERL kunnen razendsnel documenten met reguliere expressie doorzoeken.
Grep of egrep doen dat met hele bestanden tegelijk.

Maar reguliere expressie zijn heel krachtig en kunnen dus in een mum van tijd een enorme chaos aanrichten!
Als een regex niet doet wat jij verwacht is daar altijd een logische verklaring voor, een regex werkt altijd!

Meer regex