Hallo schon wieder :)
also, ich möchte aus einem Textfeld, in dem ein länger Text und email-Adresse stehen genau die Mail-Adresse herausfiltern. Dazu verwende ich eine RegEx-Prüfung. so:
Private Sub Befehl7_Click()
Dim objRegExp As regexp
Dim objMatchCollection As MatchCollection
Dim objMatch As Match
Dim strSuchbegriff As String
strSuchbegriff = "test"
Dim strOriginal As String
strOriginal = Me.textfeld
Set objRegExp = New regexp
With objRegExp
.Pattern = strSuchbegriff
.Global = True
Set objMatchCollection = _
.Execute(strOriginal)
For Each objMatch In objMatchCollection
Debug.Print "Wert: " & objMatch.Value
Next objMatch
End With
End Sub
das funzt auch, nur sucht dieser Code nur nach Worten, dich ich schon kenne. Hier "test". Ich kenne aber die Mail-adressen aber nicht, nur das @ ist mir natürlich bekannt. außerdem ist dies keine regex-Prüfung, wie ich sie verstehe. Suchen möchte ich hiernach: "SMTP:([a-zA-Z0-9\-_]?[a-zA-Z0-9.\-_]+[a-zA-Z0-9\-_]?@[a-zA-Z.-]+\.[a-zA-Z[^\]]]{2,3})"
das funzt auch bei regex-testern. wenn ich das aber statt des strings "test" eingebe funzt es eben nicht.
Es kommt kein fehler, aber es wird auch nichts gefunden. und wie gesagt, auf testseiten für regex klappt das.
wie wird also eine "richtige" regex ausgeführt?
Danköööö :)
With objRegExp
.Multiline = True
' ...
Hilft das schon?
Außerdem sollte man in jedem Fall einen Nichttreffer einkalkulieren:
If objMatchCollection.Count > 0 Then
For Each objMatch In objMatchCollection
Debug.Print "Wert: " & objMatch.Value
Next objMatch
Else
Debug.Print "kein Treffer"
End If
hi ebs17,
habe es eingefügt, ändert aber nichts.
aber der code, den ich hier aufgeführt habe, funktioniert ja. aber eben nur mit strSuchbegriff = "test"
wenn ich dort die richtige regex reinsetze, passiert nix
mit deiner schleife wird "kein treffer" ausgegeben.
die frage ist also, wird die regex überhaupt korrekt verarbeitet? oder muss ich die irgendwie anders angeben. hier noch mal der code, der keinen treffer ergib:
Private Sub Befehl7_Click()
Dim objRegExp As regexp
Dim objMatchCollection As MatchCollection
Dim objMatch As Match
Dim strSuchbegriff As String
strSuchbegriff = "([a-zA-Z0-9\-_]?[a-zA-Z0-9.\-_]+[a-zA-Z0-9\-_]?@[a-zA-Z.-]+\.[a-zA-Z[^\]]]{2,3})"
Dim strOriginal As String
strOriginal = Me.textfeld
Set objRegExp = New regexp
With objRegExp
.Pattern = strSuchbegriff
.Multiline = True
.Global = True
Set objMatchCollection = _
.Execute(strOriginal)
If objMatchCollection.Count > 0 Then
For Each objMatch In objMatchCollection
Debug.Print "Wert: " & objMatch.Value
Next objMatch
Else
Debug.Print "kein Treffer"
End If
End With
End Sub
so! scheinbar gibt es unterschiede in der interpretation einiger regex tools. scheinbar war der gesuchte ausdruck flasch.
mit diesem hier funktioniert es: ([a-zA-Z0-9_\-\.]+)@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})
somit ist hier der vollständige, funktionierende code:
Private Sub Befehl7_Click()
Dim objRegExp As regexp
Dim objMatchCollection As MatchCollection
Dim objMatch As Match
Dim strSuchbegriff As String
strSuchbegriff = "([a-zA-Z0-9_\-\.]+)@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})"
Dim strOriginal As String
strOriginal = Me.textfeld
Set objRegExp = New regexp
With objRegExp
.Pattern = strSuchbegriff
.Multiline = True
.Global = True
Set objMatchCollection = _
.Execute(strOriginal)
If objMatchCollection.Count > 0 Then
For Each objMatch In objMatchCollection
Debug.Print "Wert: " & objMatch.Value
Next objMatch
Else
Debug.Print "kein Treffer"
End If
End With
End Sub
Besten Dank, letztlich hat die schleife geholfen... :)