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.6. Regular Expressions - Positional Assertions

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.6.1. Positional en Atomic Zero-Width Assertions

Tot nu toe consumeerde de regex engine alle karakters die gevonden werden.  Met consumeren wordt hier bedoeld dat de cursor die de actuele positie van de engine binnen de inputstring bijhoudt, wordt verplaatst naar de positie volgende op de match.
Dit is niet het geval bij "zero-width assertions", deze consumeren geen karakters, maar maken slechts een veronderstelling over de positie waarop wordt gezocht.

28.6.2. Caret

Als we enkel op zoek gaan naar karakters in het begin van de inputstring, of in het begin van een lijn, kunnen we gebruik maken van ^ of \A.

Symbool ^ staat voor het begin van de string en van elke lijn (na \n) bij optie Multiline.

Shorthand \A staat altijd voor het begin van de string, deze negeert de MultiLine optie.
Visual Basic 2012 Broncode - Codevoorbeeld 711
Imports System.Text.RegularExpressions
Class Example1
    Public Shared Sub Main()
        Dim input As String = "line one line" & vbLf & _
                              "line two" & vbLf & _
                              "third line"
        '
        Console.WriteLine("^ Singleline :")
        For Each m As Match In Regex.Matches(input, "^line")
            Console.WriteLine(m.Value & " at index " & m.Index.ToString())
        Next
        Console.WriteLine()
        '
        Console.WriteLine("^ Multiline :")
        For Each m As Match In Regex.Matches(input, "^line", RegexOptions.Multiline)
            Console.WriteLine(m.Value & " at index " & m.Index.ToString())
        Next
        Console.WriteLine()
        '
        Console.WriteLine("\A Multiline Option Ignored :")
        For Each m As Match In Regex.Matches(input, "\Aline", RegexOptions.Multiline)
            Console.WriteLine(m.Value & " at index " & m.Index.ToString())
        Next
        '
        Console.ReadLine()
    End Sub
End Class
Console Application Output
^ Singleline :
line at index 0

^ Multiline :
line at index 0
line at index 14

\A Multiline Option Ignored :
line at index 0

28.6.3. Dollar

Als we enkel op zoek gaan naar karakters op het einde van de inputstring, of op het einde van een lijn, kunnen we gebruik maken van $, \z of \Z.

Symbool $ staat voor het einde van de string en van elke lijn (voor \n) bij optie Multiline.

Shorthand \z staat voor enkel het einde van de string, deze negeert de MultiLine optie.

Shorthand \Z staat voor het einde van de string of net voor \n aan het einde van de string, deze negeert de MultiLine optie.
Visual Basic 2012 Broncode - Codevoorbeeld 712
Imports System.Text.RegularExpressions
Class Example2
    Public Shared Sub Main()
        Dim input As String = "line one line" & vbLf & _
                              "line two" & vbLf & _
                              "third line" & vbLf
        '
        Console.WriteLine("$ Singleline :")
        For Each m As Match In Regex.Matches(input, "line$")
            Console.WriteLine(m.Value & " at index " & m.Index.ToString())
        Next
        Console.WriteLine()
        '
        Console.WriteLine("$ Multiline :")
        For Each m As Match In Regex.Matches(input, "line$", RegexOptions.Multiline)
            Console.WriteLine(m.Value & " at index " & m.Index.ToString())
        Next
        Console.WriteLine()
        '
        Console.WriteLine("\Z Multiline Option Ignored :")
        For Each m As Match In Regex.Matches(input, "line\Z", RegexOptions.Multiline)
            Console.WriteLine(m.Value & " at index " & m.Index.ToString())
        Next
        Console.WriteLine()
        '
        Console.WriteLine("\z Multiline Option Ignored :")
        Console.WriteLine("input : " & Regex.Escape(input))
        For Each m As Match In Regex.Matches(input, "line\z", RegexOptions.Multiline)
            Console.WriteLine(m.Value & " at index " & m.Index.ToString())
        Next
        Console.WriteLine()
        '
        Console.WriteLine("\z Multiline Option Ignored :")
        input = "line one line" & vbLf & _
                "line two" & vbLf & _
                "third line"
        Console.WriteLine("input : " & Regex.Escape(input))
        For Each m As Match In Regex.Matches(input, "line\z", RegexOptions.Multiline)
            Console.WriteLine(m.Value & " at index " & m.Index.ToString())
        Next
        '
        Console.ReadLine()
    End Sub
End Class
Console Application Output
$ Singleline :
line at index 29

$ Multiline :
line at index 9
line at index 29

\Z Multiline Option Ignored :
line at index 29

\z Multiline Option Ignored :
input : line\ one\ line\nline\ two\nthird\ line\n

\z Multiline Option Ignored :
input : line\ one\ line\nline\ two\nthird\ line
line at index 29

28.6.4. Word Boundary

Indien men zoekt naar een tekst in een woord, of een tekst aan het begin of op het einde van een woord, kan men \b gebruiken om een "word boundary" te veronderstellen.

Shorthand \B staat voor nonword boundary (overal waar geen word boundary wordt gevonden).

De vier mogelijke posities van een word boundary :

- voor het eerste character in een string, als het eerste character een word   character \w is
- na het laatste character in een string, als het laatste character een word   character \w is
- tussen een word character \w en een nonword character \W, rechts van   het word character
- tussen een nonword character \W en een word character \w, rechts van   het nonword character

In onderstaand voorbeeld zoeken we naar elke "t" aan het begin van een woord en naar elke "e" op het eind van een woord :
Visual Basic 2012 Broncode - Codevoorbeeld 713
Imports System.Text.RegularExpressions
Class Example3
    Public Shared Sub Main()
        Dim input As String = "one two-three" & vbLf & "four"
        '
        For Each m As Match In Regex.Matches(input, "\bt")
            Console.WriteLine(m.Value & " at index " & m.Index.ToString())
        Next
        Console.WriteLine()
        '
        For Each m As Match In Regex.Matches(input, "e\b")
            Console.WriteLine(m.Value & " at index " & m.Index.ToString())
        Next
        '
        Console.ReadLine()
    End Sub
End Class
Console Application Output
t at index 4
t at index 8

e at index 2
e at index 12

28.6.5. Continuing Matches

Om een volgende match te vinden op de positie volgend op de laatste positie van een vorige match kan men gebruik maken van de \G assertion.

Bij de eerste poging om een match te vinden staat \G voor de start van de inputstring (net als \A).
Visual Basic 2012 Broncode - Codevoorbeeld 714
Imports System.Text.RegularExpressions
Class Example4
    Public Shared Sub Main()
        For Each m As Match In Regex.Matches("12 34", "\G\w")
            Console.WriteLine(m.Value)
        Next
        '
        Console.ReadLine()
    End Sub
End Class
Console Application Output
1
2
De eerste match is karakter "1", daarna wordt gezocht naar een word character op index 1, dit matched met karakter "2".  Hierna wordt gezocht naar een word character op index 2, waar niets gevonden wordt.

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