RegEx

Start Omhoog Literal Characters Replacements Character Classes RegEx Options Whitespaces Positional Assertions Alternations Class Quantifiers Grouping Constructs Oefeningen

Indien je in een groot tekstdocument, bijvoorbeeld een Word document bestaande uit honderden bladzijden, elke vermelding van de naam John Johnson wil vervangen door Jane Janeson, ga je waarschijnlijk de Zoek en Vervang (Search and Replace) functionaliteit gebruiken. Manueel het document overlopen en elke vermelding stuk voor stuk aanpassen zou immers teveel werk opleveren.

In het zoekveld geef je hiervoor letterlijk de tekst John Johnson op, het vervangveld zal dan de tekst Jane Janeson krijgen.

Maar hoe ga je tewerk als je in dit document alle (verschillende) vermelde ip adressen, wil vervangen door sterretjes ***.***.***.***? Het onbegonnen werk om via de Zoek en Vervang functionaliteit voor elk mogelijk ip adres de vervanging door te voeren, er zijn immers miljarden mogelijke ip adressen.

Hetzelfde probleem zouden we hebben als we op zoek willen gaan naar alle telefoonnummers of alle emailadressen. De essentie van de moeilijkheid is hier dat je in het zoekveld niet meer letterlijk (met een constante waarde) kan opgeven welke tekst we zoeken. Ook voor het vervangveld geldt dit, je kan niet altijd letterlijk de tekst opgegeven waardoor je wil vervangen.

Als je alle literatuur referenties als [John Johnson, Hello world!], [Jane Janeson, Abc], ... wil omvormen naar iets als [Hello world!, John Johnson], [Abc, Jane Janeson], ... is er geen vaste waarde (geen letterlijk te definiëren tekst) waardoor wordt vervangen.

Wat je misschien wel is opgevallen, is hoe elke soort van tekst die we wensen op te sporen, ip adressen, telefoonnummers, emailadress of referenties, voldoet aan een bepaald patroon. Ip adressen (IPv4) bestaan uit vier groepjes van één tot drie cijfers, gescheiden door een punt. Emailadressen bevatten een @ symbool. De omschreven referenties staan tussen vierkante haakjes, auteur en titel gescheiden aan de hand van een komma. Enzovoort...

Vele toepassingen, ondermeer tekstverwerkende applicaties, ondersteunen dan ook een "pattern matching" notatie bij het opgeven welke tekst je wil opsporen, of door welke tekst je deze wil vervangen. In deze notatie gebruik men jokertekens ("wildcards"), operatoren, multipliciteits indicatoren en andere om het patroon te definiëren. Multipliciteits indicatoren geven bijvoorbeeld aan hoe vaak een karakter of groter stuk tekst kan voorkomen. Soms is er ook een mogelijk om met een disjunction operator als | aan te geven dat er verschillende mogelijkheden zijn. Vaak voorkomende jokertekens zijn ? en *, waarbij ? dan doorgaans staat voor één karakter en * voor nul of meerdere karakters. Soms worden deze symbolen ? en * echter ook gebruikt om te multipliciteit te bepalen. De zoek- of vervangwaardes die in pattern matching syntax worden opgesteld worden ook wel "reguliere expressies" genoemd, vaak afgekort tot "regex".

Als je in document in Microsoft Word alle teksten Visual Studio 2010 of Visual Studio 2012 wil terugvinden dan kan je in de Zoek functie, waar je aangeeft jokertekens te gebruiken, het zoekveld instellen op Visual Studio 201[02]. De vierkante haken geven aan dat op die positie een karakter wordt verwacht die in dit geval 0 of 2 is.

Naast tekstverwerkings programmas (Microsoft Word, OpenOffice Writer, Notepad++, Textmate, Vim, ...) zijn er nog tal van andere toepassingen waarin men pattern matching notaties kan gebruiken. Ontwikkelomgevingen als Eclips, Visual Studio en Dreamweaver, DBMSn als Microsoft SQL Server, Oracle Databases en Appache HTTP Server om maar enkele voorbeelden te geven.

Systeembeheerders bijvoorbeeld gebruiken vaak reguliere expressies om in log- of configuratiebestanden op zoek te gaan naar bepaalde entries. Ook programmatie frameworks, bibliotheken of APIs, zoals het .NET Framework kunnen ondersteuning bieden voor reguliere expressies. Dus ook programmeurs kunnen in hun toepassingen gebruik maken van pattern matching notaties om één of ander vorm van complexere tekstparsing toe te passen. In .NET hebben we de .NET regex engine (namespace System.Text.RegularExpressions).

Maar zoals uit de hiervoor vermelde voorbeelden wel duidelijk is, heeft eigenlijk elke computergebruiker nut aan kennis over reguliere expressies.

Een geavanceerde search engine als Google heeft zelf enkele mogelijkheden die wat weg heeft van reguliere expressies. Zo zal een asterisk * tussen dubbele aanhalingstekens bij een Google search staan voor één of meerdere woorden. Zoekwaarde "Frank * Wright" zal resultaten opleveren voor paginas met de teksten Frank Lloyd Wright, Frank Edwin Wright, Frank. Later that day Wright, ... Een zoekopdracht Belgium|Holland levert paginas op met de tekst Belgium of paginas met de tekst Holland.