Het moeilijke gemak van reguliere expressies

Toveren met regex

Het gebeurt niet zo vaak dat ik in een schrijftekst op een ingewikkelde manier iets wil zoeken en vervangen. Meestal is dat aan de hand bij gegevens die in een bepaald formaat horen te staan. Html, of xml bijvoorbeeld. In de loop der jaren heb ik langzaamaan geleerd om dit zoek- en vervangwerk via de zogenaamde reguliere expressies uit te voeren. Ik vermoed dat veel mensen er op deze geleidelijke manier mee vertrouwd zijn geraakt, en er net als ik nooit een cursus in hebben gevolgd. Want je kunt er met gemak een moeilijke cursus voor maken. Elke keer als ik ze wil gebruiken moet ik er opnieuw induiken. Gelukkig zijn er websites die je hiermee helpen. Als je nog nooit op deze manier gewerkt hebt, kijk dan even mee met dit voorbeeld. Misschien dat je de stap dan een keer gaat wagen.

Reguliere expressies. Er zijn mensen die in paniek beginnen te schreeuwen als ze iemand de term horen bezigen. Het is ook niet verwonderlijk, als je de zoekpatronen ziet. Het zijn net geheimzinnige toverspreuken. Magic Of soms lijken ze op het vloeken (!*@#$!!!) in een stripverhaal. De expressies hebben hun uiterlijk duidelijk niet mee, daarnaast kunnen ze zich ook gedragen als erg gevaarlijke monsters. Sommige expressies worden zelfs ‘greedy’ genoemd, als ze heel veel tekst willen opeten. Daarom is het aan te bevelen er voorzichtig mee om te gaan. Zoals gezegd zijn er websites die je daarmee kunnen helpen. Ikzelf gebruik hiervoor vaak regex101 , waar de 101 staat voor ‘beginners’. Het leuke van deze site is, dat die aan de rechterkant laat zien wat je aan het doen bent. Dat werkt in ieder geval voor mij heel aardig.

Vraag en antwoord

Laatst had ik een groot aantal kleine html-bestanden met vragen en antwoorden. De antwoorden stonden meteen achter de vraag. Ik wilde graag het antwoord verstoppen, en alleen zichtbaar maken als je met de muis over het antwoord beweegt.

Hoeveel is vier keer vijfentwintig? Honderd.

Moet dan worden:

Hoeveel is vier keer vijfentwintig?

Je kunt nu het antwoord alleen zien door er met de muis overheen te bewegen.
Hiervoor moet de html veranderd worden van

Hoeveel is vier keer vijfentwintig? Honderd.<br/>

in

<span title="Honderd">Hoeveel is vier keer vijfentwintig?</span><br/>

Je ziet dat je dan een stukje tekst achteraan (Honderd) naar voren moet halen. Ook is het nodig om html-tags (span en title) toe te voegen. En ja, dit kan dus in één keer met reguliere expressies.

Editor

Als je Windows gebruikt, dan zul je vast wel Notepad++ kunnen gebruiken. Er zijn genoeg andere editors die reguliere expressies ondersteunen. Een editor die op Windows, Linux en OS X werkt is bijvoorbeeld Atom. Het is vaak even zoeken naar het knopje dat aangeeft dat je met reguliere expressies wil zoeken. Bij Atom staat het bijvoorbeeld rechts beneden in een hoekje.
Atom knopje regex
Maar laten we eerst eens naar de website gaan die je kan helpen. Je kopieert eerst te doorzoeken tekst in het vakje voor “teststring”, en bovenaan ga je rustig je toverformule opstellen. Sommige tekens zijn handig om meteen te weten: een punt (.) staat voor elk teken dat je maar kunt bedenken, en een ster (*) betekent “zoek van het voorgaande teken zoveel als maar mogelijk is”. Dan betekent .* dus gewoon alles zoeken. Hier zien we al dat het monster erg greedy kan worden.
Alles selecteren
Uiteindelijk kwam ik tot het volgende resultaat.
Uiteindelijk resultaat
Je ziet hier dat je stukken tekst apart van elkaar kunt houden door haakjes () te gebruiken. Bij het vervangen kun je aan deze stukken tekst refereren door die aan te duiden met eerste, tweede of derde: $1, $2 of $3. Op deze manier kun je dus $2 in het resultaat plaatsen vóór $1. Aan de rechterkant op de site kun je zien welke tekst geselecteerd wordt, en waarom. Ook vind je daar de uitleg van de tekens die je voor reguliere expressies kunt gebruiken. Ik had zelf wat moeite om tekst te selecteren “tot aan” het vraagteken bijvoorbeeld. Of “vanaf” het vraagteken. Hoe dat moet, heb ik ook moeten opzoeken op internet. Het vraagteken is trouwens een teken dat eigenlijk is gereserveerd voor reguliere expressies. Als je echt letterlijk op het vraagteken wil zoeken, dan moet je er een backslash voor zetten, om aan te geven dat je echt wel letterlijk het vraagteken bedoelt.

Flits

Je moet je bedenken dat je even bezig bent om zo'n toverformule op te stellen. Maar toen ik klaar was en abacadabra kon zeggen, had ik in een fractie van een seconde veertig bestanden veranderd. En dat is natuurlijk wel een leuk resultaat.
Als je enthousiast bent geworden door de flexibiliteit en de kracht van reguliere expressies en niet bang bent voor dit krachtige monster, dan kun je enkele introductiecursussen volgen. Er zijn er genoeg te vinden op internet. Maar het leukste is toch om het gewoon te doen op deze 101 website.

#hacks #website #regex