Access - 'Reguläre Ausdrücke'
Es handelt sich hier nicht um ein Tutorial zu regulären Ausdrücken, sondern vielmehr um eine Sammlung von aufbereiteten, regulären Ausdrücken, die zeigen soll, wie praktisch und mächtig diese bei Textanalysen und -manipulation sein können. Die Codes stammen von unterschiedlichen Benutzern aus dem MS-Offce-Forum - falls namentliche Erwähnung gewünscht, werde ich diese demnächst nachholen.
Vorbereitung
Jeder der weiter unten aufgeführten Codes benötigt folgendes im Deklarationsbereich des Moduls:
Option Compare Database Option Explicit Private pRegEx As Object Public Property Get oRegEx() As Object If (pRegEx Is Nothing) Then Set pRegEx = CreateObject("Vbscript.Regexp") End If Set oRegEx = pRegEx End Property
Datum extrahieren
In einem Text steckt ein Datum. Folgende Funktion ermittelt das Datum, egal ob es am Anfang, mitten im Text oder am Ende des Textes steht.
Public Function fRegDate(ByVal vText As Variant) As Variant Const cDatePattern As String = "([1-9]|0[1-9]|[12][0-9]|3[01])\D([1-9]|" & _ "0[1-9]|1[012])\D(19[0-9][0-9]|20[0-9][0-9])" Dim oMatch As Object If Len("" & vText) = 0 Then fRegDate = Null Else With oRegEx .Global = False .Pattern = cDatePattern Set oMatch = .Execute(vText) End With If oMatch.Count > 0 Then fRegDate = CDate(oMatch(0)) Else fRegDate = Null End If End If Set oMatch = Nothing End Function
EMail auf Gültigkeit hin überprüfen
Es soll geprüft werden, ob eine gültige Mailadresse eingegeben wurde.
Public Function IsValidEmailAddress(ByVal vAddress As Variant) As Boolean Const cEmailPattern As String = "^([a-zA-Z0-9_\-\.\+]+)" & _ "@(((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\." & _ "(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\." & _ "(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\." & _ "(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|" & _ "(\w+((-\w+)|(\w*))\.)+[a-z]{2,4}))$" 'anderes Muster, hiermit sind Umlaute im domain-part z.T. ebenfalls erlaubt: 'Const cEmailPattern As String = "^([a-zA-Z0-9_\-\.]+)@[a-zäöüß0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$" If Len("" & vAddress) = 0 Then IsValidEmailAddress = False Else With oRegEx .Global = False .IgnoreCase = True .Pattern = cEmailPattern IsValidEmailAddress = .Test(vAddress) End With End If End Function
Nach Satzzeichen Leerzeichen einsetzen
Nach Satzzeichen (Punkt, Komma, Semikolon) soll ein Leerzeichen gesetzt werden. Währungsangaben (z.B. "1.500,00 Eur") sollen unbehandelt bleiben.
Public Function nicePunctuation(ByVal vText As Variant) As Variant Const cSearchPattern As String = "([^\,;\ \.])([\.,;])([^0-9\ -])" Const cReplaceText As String = "$1$2 $3" If Len("" & vText) = 0 Then nicePunctuation = Null Else With oRegEx .Global = False .Pattern = cSearchPattern Do While .Test(vText) vText = .Replace(vText, cReplaceText) Loop nicePunctuation = vText End With End If End Function
Pfad extrahieren
In einem Text (z.B. Memofeld) steht an beliebiger Stelle ein Windowspfad. Mit der folgenden Funktion lässt sich der Pfad extrahieren.
Public Function fgetPath(ByVal vText As Variant) As Variant 'Muster für normale und UNC-Pfade, sowie Pfade mit div. Sonderzeichen (\S) (plus Leerzeichen dank \s) 'vText muss zur Zeit Pfad mit Dateierweiterung enthalten 'Laufwerkbuchstaben, Erweiterungen zur Zeit nur mit normalen Zeichen (\w): Const cSearchPattern As String = "(\w:\\[\S\s]+|\\\\[\S\s]+)\.[\w]+" Dim oMatch As Object If Len("" & vText) = 0 Then fgetPath = Null Else With oRegEx .Global = True .Pattern = cSearchPattern Set oMatch = .Execute(vText) End With If oMatch.Count > 0 Then fgetPath = oMatch(0) Else fgetPath = Null End If End If Set oMatch = Nothing End Function
Links
Weitere Beispiele und Hinweise zur Anwendung von regulären Ausdrücken in VBA gibt es unter: