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.5. Regular Expressions - RegexOptions

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.

28.5.1. IgnoreCases

Bepaalde opties uit de System.Text.RegularExpressions.RegexOptions enumeratie kunnen gebruikt worden om het matching gedrag aan te passen.

Een vaak gebruikte optie is IgnoreCases, deze zorgt ervoor dat case-insensitive wordt gezocht :
Visual Basic 2012 Broncode - Codevoorbeeld 707
Imports System.Text.RegularExpressions
Class Example1
    Public Shared Sub Main()
        Dim input As String = "abcABC"
        For Each m As Match In Regex.Matches(input, "a", _
                                             RegexOptions.IgnoreCase)
            Console.WriteLine(m.Value)
        Next
        '
        Console.ReadLine()
    End Sub
End Class
Console Application Output
a
A

28.5.2. Singleline

De SingleLine optie zorgt ervoor dat de period character class . alle karakters inclusief de newline vindt :
Visual Basic 2012 Broncode - Codevoorbeeld 708
Imports System.Text.RegularExpressions
Class Example2
    Public Shared Sub Main()
        Dim input As String = "a" & vbLf & "c"
        '
        Console.WriteLine("Input : ")
        Console.WriteLine(input)
        Console.WriteLine()
        '
        Console.WriteLine("Escaped Input : ")
        Console.WriteLine(Regex.Escape(input))
        Console.WriteLine()
        '
        Console.WriteLine("Matches for pattern ""."" and option Singleline :")
        For Each m As Match In Regex.Matches(input, ".", RegexOptions.Singleline)
            Console.WriteLine("""" & Regex.Escape(m.Value) & """ " & _
                              "at index " & m.Index.ToString())
        Next
        Console.WriteLine()
        '
        Console.WriteLine("Matches for pattern ""."" and option Multiline :")
        For Each m As Match In Regex.Matches(input, ".", RegexOptions.Multiline)
            Console.WriteLine("""" & m.Value & """ " & _
                              "at index " & m.Index.ToString())
        Next
        '
        Console.ReadLine()
    End Sub
End Class
Console Application Output
Input :
a
c

Escaped Input :
a\nc

Matches for pattern "." and option Singleline :
"a" at index 0
"\n" at index 1
"c" at index 2

Matches for pattern "." and option Multiline :
"a" at index 0
"c" at index 2

28.5.3. String Literals, Whitespaces en Environment.NewLine

De Visual Basic constante vbLf gebruikt in vorig voorbeeld staat voor een newline (\n).  Een newline wordt ook wel eens line break, line feed, end-of-line of zelfs carriage return genoemd.
In Visual Basic String literals is het niet mogelijk whitespaces andere dan spatie en tab (als de geconventioneerde acht spaties dan) op te nemen.

Metacharacters als \n of \r\n voor linebreak, \t voor tab, \f voor form feed en \v voor vertical tab, die we in reguliere expressies kunnen gebruiken, worden in Visual Basic String literals niet als dusdanig geïnterpreteerd.  Een String literal als "a\nb" zal gewoon staan voor een tekst bestaande uit de aanéénschakeling van de karakters a, \, n en b.

Het is natuurlijk wel mogelijk om at runtime teksten als \n, \r, \r\n, \t, \f en \v te vervangen (bijvoorbeeld met de String.Replace of Regex.Replace methods) door corresponderende Visual Basic constanten:
\n        vbLf    ("Line Feed")
\r        vbCr    ("Carriage Return": terugkeren van cursor naar begin van regel)
\r\n      vbCrLf
\t        vbTab
\f        vbFormFeed
\v        vbVerticalTab
Form feed en vertical tab waren vooral intressant voor oudere print devices.  Form feed zorgt voor een soort van page break en het voeden van een nieuwe pagina.
Een metacharacter dat werd opgenomen om aan te geven dat het vervolg op een nieuwe pagina wordt gedrukt.
Vertical tab zal net als een gewone (horizontal) tab een aantal posities opschuiven, in dit geval een aantal lijnen, maar dan zonder dat de carriage terugkeert.

Verschillende toepassingen en besturingssystemen gebruiken verschillende newline/line break/line feed/end-of-line metakarakters.  Om het simpel te houden kan je stellen dat op Unix platformen wordt gewerkt met \n, terwijl op non-Unix platformen (bv Windows) wordt gewerkt met \r\n.
Omdat dit, bijvoorbeeld bij het verwerken van bestanden afkomstig uit verschillende platformen, problemen kan introduceren beschikken we in het .NET Framework over de Environment.NewLine property.  Deze kan corresponderen met vbLf (\n)(Unix) of vbCrLf (\r\n)(non-Unix) afhankelijk van de omgeving waarin gewerkt wordt.

Waar hier in de voorbeelden van dit hoofdstuk gewerkt wordt met vbLf om een input string samen te stellen, kan men \n gebruiken in de regex patterns om naar deze newline op zoek te gaan.
Als er gewerkt wordt met vbCrLf om de input string samen te stellen, kan men \r\n gebruiken in de reguliere expressie om deze newline terug te vinden.
Bij het gebruik van Environment.NewLine in de input string kan het dus zowel gaan om een newline die je met \n of met \r\n kan terugvinden.  Je zou hier het regex pattern \r?\n kunnen gebruiken.  De ? in \r? stelt dat de carriage return nul of één keer kan voorkomen.  Verderop bespreken we "quantifiers" als ?.

28.5.4. Meerdere Opties

Meerdere opties kan je combineren door de bitwise Or operator te gebruiken.  Want deze is immers met de FlagsAttribute gedefinieerd.
Visual Basic 2012 Broncode - Codevoorbeeld 709
Imports System.Text.RegularExpressions
Class Example3
    Public Shared Sub Main()
        Dim input As String = "a" & vbLf & "A"
        For Each m As Match In Regex.Matches(input, ".", _
                                             RegexOptions.Singleline Or _
                                             RegexOptions.IgnoreCase)
            Console.WriteLine("""" & Regex.Escape(m.Value) & """ " & _
                              "at index " & m.Index.ToString())
        Next
        '
        Console.ReadLine()
    End Sub
End Class
Console Application Output
"a" at index 0
"\n" at index 1
"A" at index 2

28.5.5. Regular Expression Options via Inline Grouping Construct

In plaats van de System.Text.RegularExpressions.RegexOptions enumeratie te gebruiken, kan men ook via een inline grouping construct dergelijke matching opties instellen.

Plaats daarvoor haakjes rond het pattern (dit maakt hiervan geen capture group), en start tussen de haakjes met een ? gevolgd door de karakters die aanduiden om welke opties het gaat :
Visual Basic 2012 Broncode - Codevoorbeeld 710
Imports System.Text.RegularExpressions
Class Example4
    Public Shared Sub Main()
        Dim input As String = "a" & vbLf & "A"
        For Each m As Match In Regex.Matches(input, "(?is:.)")
            Console.WriteLine("""" & Regex.Escape(m.Value) & """ " & _
                              "at index " & m.Index.ToString())
        Next
        '
        Console.ReadLine()
    End Sub
End Class
Console Application Output
"a" at index 0
"\n" at index 1
"A" at index 2
In bovenstaand voorbeeld wordt het karakter i gebruikt voor de optie IngnoreCase en het karakter s staat dan voor de optie SingleLine.

In volgende topics worden nog andere RegexOptions besproken.

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