Problembehandlung bei regulären Ausdrücken in Visual Basic
Aktualisiert: November 2007
In diesem Thema werden einige allgemeine Probleme erörtert, die beim Arbeiten mit regulären Ausdrücken auftreten können. Es enthält einige Tipps zum Lösen dieser Probleme und stellt ein Verfahren für den Zugriff auf aufgezeichnete Zeichenfolgen vor.
Keine Übereinstimmung mit dem gewünschten Muster
Im Folgenden sind einige allgemeine Aufgaben aufgelistet, die Sie mit regulären Ausdrücken ausführen können, sowie Tipps zur Problembehandlung, falls Sie nicht die erwarteten Ergebnisse erhalten:
Überprüfen von Zeichenfolgen. Ein regulärer Ausdruck für die Zeichenfolgenvalidierung muss mit dem Zeichen ^ beginnen. Dieses weist das Modul für reguläre Ausdrücke an, den Vergleich des angegebenen Musters am Anfang der Zeichenfolge zu beginnen. Weitere Informationen finden Sie unter Erstellen einer Validierungsfunktion in Visual Basic und Atomare Assertionen mit einer Breite von Null.
Vergleichen mit Quantifizierern. Die Quantifizierer für reguläre Ausdrücke (*, +?, {}) werden als gierig bezeichnet, d. h., sie liefern die längstmögliche übereinstimmende Zeichenfolge. Für einige Muster empfiehlt sich jedoch möglicherweise die Verwendung eines so genannten trägen Vergleichs, um die kürzestmögliche Zeichenfolge zu erhalten. Die trägen Quantifizierer für reguläre Ausdrücke sind *?, +?, ?? und {}?. Weitere Informationen finden Sie unter Quantifizierer.
Vergleichen mit geschachtelten Quantifizierern. Wenn Sie geschachtelte Quantifizierer verwenden, müssen alle Quantifizierer entweder gierige oder träge Quantifizierer sein. Andernfalls sind die Ergebnisse des Vergleichs schwer vorherzusagen.
Zugreifen auf die aufgezeichneten Zeichenfolgen
Wenn ein regulärer Ausdruck die gewünschten Zeichenfolgen findet, möchten Sie diese Zeichenfolgen eventuell aufzeichnen und anschließend auf die aufgezeichneten Elemente zugreifen. Sie können Gruppierungskonstrukte verwenden, um die Zeichenfolgen aufzuzeichnen, die mit den Gruppen von Unterausdrücken im regulären Ausdruck übereinstimmen. Weitere Informationen finden Sie unter Gruppierungskonstrukte.
Der Zugriff auf die mit geschachtelten Gruppen aufgezeichneten Zeichenfolgen umfasst mehrere Schritte.
So greifen Sie auf aufgezeichneten Text zu
Erstellen Sie ein Regex-Objekt für einen regulären Ausdruck.
Rufen Sie die Match-Methode auf, um das Match-Objekt abzurufen.
Das Match-Objekt enthält Informationen über die Übereinstimmung des regulären Ausdrucks mit der Zeichenfolge.
Durchlaufen Sie die in der Groups-Auflistung des Match-Objekts gespeicherten Group-Objekte.
Die Group-Objekte enthalten Informationen über die Ergebnisse aus einer einzelnen Aufzeichnungsgruppe.
Durchlaufen Sie die in der Captures-Auflistung jedes Group-Objekts gespeicherten Capture-Objekte.
Jedes Capture-Objekt enthält Informationen über einen einzelnen aufgezeichneten Unterausdruck, einschließlich der übereinstimmenden Teilzeichenfolge und ihrer Position.
Beispielsweise wird im folgenden Code der Zugriff auf die Zeichenfolgen veranschaulicht, die mit einem regulären Ausdruck aufgezeichnet wurden, der drei Aufzeichnungsgruppen enthält:
''' <summary>
''' Parses an e-mail address into its parts.
''' </summary>
''' <param name="emailString">E-mail address to parse.</param>
''' <remarks> For example, this method displays the following
''' text when called with "someone@mail.contoso.com":
''' User name: someone
''' Address part: mail
''' Address part: contoso
''' Address part: com
''' </remarks>
Sub ParseEmailAddress(ByVal emailString As String)
Dim emailRegEx As New Regex("(\S+)@([^\.\s]+)(?:\.([^\.\s]+))+")
Dim m As Match = emailRegEx.Match(emailString)
If m.Success Then
Dim output As String = ""
output &= "User name: " & m.Groups(1).Value & vbCrLf
For i As Integer = 2 To m.Groups.Count - 1
Dim g As Group = m.Groups(i)
For Each c As Capture In g.Captures
output &= "Address part: " & c.Value & vbCrLf
Next
Next
MsgBox(output)
Else
MsgBox("The e-mail address cannot be parsed.")
End If
End Sub
Siehe auch
Aufgaben
Problembehandlung bei Zeichenfolgen in Visual Basic