Programmeren in ASP.NET/Reguliere expressies

Uit Wikibooks
Naar navigatie springen Naar zoeken springen

Programmeren in ASP.NET

  1. Wat is ASP.NET?
  2. Wat heb ik nodig voor ASP.NET?
  3. Een ASP.NET-server installeren
  4. Je eerste ASP.NET-pagina
  5. HTML-controls
  6. Foutzoeken
  7. Web-server-controls
  8. Webformulieren
  9. Veelgebruikte objecten
  10. Validering
  11. Master-pagina's
  12. Navigatie
  13. Gegevenstoegang
  14. Werken met databanken
  15. Databankgegevens wijzigen
  16. Werken met datacontrols
  17. GridView
  18. FormView en DetailsView
  19. User-controls
  20. Custom controls
  21. AJAX
  22. Viewstate
  23. Configuratiebestanden
  24. Webservices
  25. Beveiliging
  26. Personalisatie en profielen
  27. Thema's en skins
  28. WebParts
  29. Globalisering
  30. Caching
  31. Mail vanuit ASP.NET
  32. Reguliere expressies
  33. Server-side afbeeldingen
  34. Mobiele toepassingen
  35. Meer informatie
  36. Appendix: foutmeldingen


Reguliere expressies bieden een simpele en efficiënte manier om tekst te doorzoeken en te vervangen. Een reguliere expressie is een patroon waarmee je instelt waar je wil naar zoeken binnen een bestaande string. Ze werden oorspronkelijk ontwikkeld voor Perl en Unix, maar ondertussen vind je ze terug in veel moderne programmeertalen.

Dit kan je doen met reguliere expressies:

  • controleren of een string aan een bepaald patroon beantwoordt
  • een bepaald patroon in een string zoeken
  • een bepaald patroon in een string één of meerdere malen vervangen of verwijderen
  • delen van een string die aan een bepaald patroon voldoen uit de string halen.

Typische toepassingen zijn:

  • validering van formulieren en andere gegevens
  • oppoetsen en herformatteren van data
  • doorzoeken van data

Een RegEx-object aanmaken[bewerken]

Je maakt een nieuwe reguliere expressie door het zoekpatroon in de vorm van eeen string op te geven bij het aanmaken van een nieuw Regex-object:

Dim re As New Regex("[AEIOU]\w\w\w")

Deze expressie zoekt naar een string die begint met een klinker, gevolgd door 3 alfanumerieke karakters (het \w symbool). Het ziet er nogal cryptisch uit, maar je kan de regels heel snel leren. Veelgebruikte expressies vind je ook op Internet.

Bij het aanmaken van een RegEx-object mag je als tweede parameter opties opgeven.

Dim re As New Regex("[AEIOU]\w\w\w", RegexOptions.IgnoreCase)

Dit zijn de belangrijkste opties:

  • Multiline: verandert de betekenis van ^ en $ (zie verder) zodat ze een match aan het begin (^) en aan het eind ($) van de regel vereisen, in plaats van aan het begin en eind van de ganse string.
  • IgnoreCase: de controle maakt geen verschil tussen kleine letters en hoofdletters.

Een patroon aanmaken[bewerken]

Als je binnen een tekst wil zoeken naar het woord "wiki", dan gebruik je gewoon de reguliere expressie:

New RegEx("wiki")

Herhalingsoperators[bewerken]

Teken Betekenis Patroon Voorbeelden
leeg 3 33 333
geen één keer het karakter 3 neen ja neen neen
? nul keer of één keer het voorafgaande karakter 3? ja ja neen neen
+ één keer of meer het voorafgaande karakter 3+ neen ja ja ja
* nul keer of meer het voorafgaande karakter 3* ja ja ja ja

Jokerteken: het punt[bewerken]

. (punt) komt overeen met eender welk karakter (behalve een nieuwe regel)

Voorbeelden:

  • A. komt overeen met een hoofdletter A gevolgd door eender welk ander karakter.
  • A.+ komt overeen met een hoofdletter A gevolgd door één of meer karakters
  • htm.? komt overeen met "htm" gevolgd door een optioneel karakter (zowel htm als html zullen voldoen)

Alternatieven met [ ][bewerken]

Met vierkante haken kan je een aantal alternatieven aangeven. Men noemt dit ook een karakterklasse. Een karakterklasse is een soort minitaal binnen een reguliere expressie. Met behulp van de - operator kan je zelfs een gans bereik aangeven.

Teken Betekenis
[Cc] hoofdletter of kleine letter c
[A-Z] eender welke hoofdletter van A tot en met Z
[A-Za-z] eender welke hoofdletter of kleine letter
[0-9] eender welk cijfer van 0 tot 9
[A-Za-z0-9] eender welke letter of cijfer

Als een karakterklasse begint met ^, dan heeft dit de betekenis van een negatie (dus: alles behalve hetgeen volgt)

Teken Betekenis
[^0] alles behalve het cijfer 0
[^aeiouAEIOU] alles behalve een klinker

Frequentie aangeven met accolades {}[bewerken]

Met de {}-operators (accolades) kan je de frequentie van de voorafgaande expressie aangeven.

Er zijn 3 vormen:

  • {exact_aantal_keer_dat_het_patroon_moet_voorkomen}
  • {min_aantal_keer, max_aantal_keer }
  • {min_aantal_keer, }

Voorbeelden:

Patroon Betekenis Voorbeeld
[A-Z][a-z]{3} Een hoofdletter gevolgd door 3 kleine letters Abcd
[A-Z][a-z]{2,4} Een hoofdletter gevolgd door minimaal 2 en maximaal 4 kleine letters Abc, Abcd, Abcde
[0-9]{4} Exact 4 cijfers 1234
.{3,8}\..{3} 3 tot 8 karakters, gevolgd door een punt, en dan nog 3 karakters command.com

Hulpexpressies[bewerken]

Teken Betekenis
\w alle woord-tekens (letters, cijfers of underscore)
\W alle niet-woord-tekens (letters, cijfers of underscore)
\d alle cijfers
\D alle niet-cijfers.
\s alle "witte ruimte"-tekens (spatie, tab, etc.)
\S alle niet-"witte ruimte"-tekens
\b alle woord-grenzen (spaties en leestekens)
\r carriage return
\n nieuwe regel (meestal samen met \r)
\t tabulator-teken

Begin en einde[bewerken]

Teken Betekenis Patroon Voorbeeld
^ Vereist een geslaagde vergelijking aan het begin van een tekenreeks. ^abc abc, abcdef, abc123
$ Vereist een geslaagde vergelijking aan het einde van een tekenreeks. abc$ abc, 123abc

Deze tekens voor begin en einde worden vooral gebruikt bij validering (controle of een string voldoet aan een bepaald patroon).

Met de multiline optie aan moet deze vergelijking slagen voor elke regel. Met de multiline optie af, moet de vergelijking alleen slagen aan het begin en einde van de ganse string.

Logisch of[bewerken]

Teken Betekenis Patroon Voorbeeld
a|b Zoek a of b. ja|nee ja, nee

Backslash[bewerken]

De backslash wordt gebruikt om tekens met een speciale betekenis aan te duiden.

\* een * (geen herhaling)
\+ een + (geen herhaling)
\? een ? (geen herhaling)
\. een . (geen joker)
\\ een backslash
\/ een slash
\( een haakje

enz...

Voorbeelden van patronen[bewerken]

Toepassing Patroon Voorbeelden
Alleen cijfers
^\d+$
123412
Alleen kleine letters
^[a-z]+$
testvoorbeeld
Alleen letters of spaties
^[a-zA-Z ]+$
Jan De Smet
Ongevoelig voor hoofdletters + alleen letters of spaties
(?i)^[a-z ]+$
Jan De Smet
Bankrekeningnummer (België)
^\d{3}-\d{7}-\d{2}$
123-4567890-12
Datum
^(3[01]|0[1-9]|[12]\d)\/(0[1-9]|1[012])\/\d{4}
15/06/2003
e-mail
^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,6})+$
jan.smit@glo.be
Telefoonnummer (9 cijfers)
^\d{9}$
016500404
Telefoonnummer met /
^(0\d\/\d{7}|0\d{2}\/\d{6})$
016/500404
02/4112907
URL
^(((ht|f)tps?)|mailto|news):\/{2}(\w+\.)*\w+\.\w{2,6}$
http://www.tv.be
URL met path
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
http://www.tv.be/nl/nws.htm#7

Meer voorbeelden vind je op www.regexlib.com

Methodes van het RegEx-object[bewerken]

Matches()[bewerken]

Deze methode geeft een MatchCollection-object terug, dit is de verzameling met alle gevonden "treffers". Nadat je het RegEx-object aangemaakt hebt, kan je een lus gebruiken om alle "treffers" op te sommen met behulp van de Matches-methode:

Dim strPatroon As String = "[AEIOU]\w\w\w"
Dim re As New RegEx(strPatroon)
Dim text As String = "Anne Bob Eric Fred"
Dim m As Match
For Each m In re.Matches(text)
   Label1.Text &= m.Value & " op de plaats " & m.Index & "<br>"
Next

Het resultaat hiervan is:

Anne op de plaats 0
Eric op de plaats 9

Replace()[bewerken]

Als je tekst wil vervangen door andere tekst, dan gebruik je Replace().

In dit voorbeeld wordt elk woord dat eindigt op ".NET" van kleur veranderd:

Dim strPatroon As String = "(\b[a-zA-Z\._]+?\.NET\b)"

strTekst = "VB.NET en ASP.NET zijn onderdelen van het .NET framework."

Dim strVervanging As String = "<b style='color: #FF0000'>.NET</b>"
Dim strNieuweTekst As String = Regex.Replace(strTekst, strPatroon, strVervanging)

Split()[bewerken]

Split(strInvoer,reScheiding) geeft een array van strings door de invoerstring strInvoer te splitsen op de plaatsen waar de expressie reScheiding voorkomt.

Dim str() As String = Regex.Split("Dit is een test"," ")

geeft als resultaat 4 strings: "Dit", "is", "een" en "test".

IsMatch()[bewerken]

IsMatch(strInvoer,reZoekterm) geeft True als de expressie reZoekterm voorkomt in de invoerstring strInvoer.

RegEx.IsMatch("Wikibooks", "iki") 

geeft True.

Match()[bewerken]

Match(strInvoer,reZoekterm) geeft als resultaat een Match-object indien de invoerstring strInvoer de expressie reZoekterm bevat.

Ontwikkelen van reguliere expressies[bewerken]

Vaak is het handig om reguliere expressies te testen of te ontwikkelen door veel te testen. Een goede (gratis) regulier expressie ontwikkel- en test-platform is Expresso. Deze kan ook automatisch C#/VB.Net code genereren.

Meer informatie[bewerken]

Oefeningen[bewerken]

  1. Maak een formulier waar je een tekst kan ingeven. Na versturen toon je de tekst opnieuw, maar vervang overal het woord "boek" door "wikibooks".
  2. Maak een formulier waar je een HTML-tekst kan ingeven. Toon na submit de tekst 2 keer, 1 keer als HTML, en 1 keer met alle tags verwijderd (als platte tekst).


Heckert GNU.png Deze pagina is vrijgegeven onder de GNU Free Documentation License (GFDL) en nog niet onder CC-BY-SA. Klik hier voor meer informatie.
Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.