Visual Basic 2012 Voorbeelden
   

visual basic 2012 broncode voorbeelden

Blijf op de hoogte van de recente aanpassingen op vbvoorbeelden!

Microsoft Visual Studio 2012Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

28. Reguliere Expressies

Print Email Deel op Twitter Deel op Facebook

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.


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 ***.***.***.***?  Hier is 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.

In dit hoofdstuk bestuderen we de syntax van de .NET regex engine.  Deze engine is één van de krachtigste die er bestaat, enorm veel mogelijkheden worden ons geboden.  Kennis over de mogelijkheden en werking van deze engine zal je in staat stellen met de meeste andere regex engines, of toepassingen met reguliere expressie mogelijkheden, om te gaan.  Het kan wel zijn dat er kleinere syntaxische verschillen zijn met deze andere engines of toepassingen, maar eens je weet wat er met regex ongeveer mogelijk is, wordt het opzoeken van de te gebruiken syntax veel makkelijker.

Naast de regex notatie wordt ook nog besproken welke methods, datatypes, namespaces, ... men nodig heeft om in je toepassing reguliere expressies te gebruiken.  Ben je niet geïntresseerd in het programmatorische aspect, dan kan je nog altijd dit hoofdstuk gebruiken om iets bij te leren.  Je hoeft dan enkel te letten op de patterns die in de voorbeelden worden gebruikt.

Onderwerpen

  2012 2010 2008
  2012 2010 2008
  2012 2010 2008
  2012 2010 2008  gewijzigd
  2012 2010 2008  gewijzigd
  2012 2010 2008
  2012 2010 2008
  2012 2010 2008
  2012 2010 2008
  2012 2010 2008
  2012 2010 2008  gewijzigd


Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.