Zum Inhalt dieser Seite

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.

Nach obenVorbereitung

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
 

Nach obenDatum 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
 

Nach obenEMail 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 obenNach 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
 

Nach obenPfad 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
 

Weitere Beispiele und Hinweise zur Anwendung von regulären Ausdrücken in VBA gibt es unter:

Home