Is there a way to do negative and positive lookbehind in VBA regex?
I want to not match if the string starts with "A", so I am currently doing ^A at the start of the pattern, then removing the first character of match(0). Obviously not the best method!
I am using the regExp object.
VBA offers lookahead (both positive and negative) but rather inconsistently not lookbehind.
The best example of using Regex with VBA that I have seen is this article by Patrick Matthews.
[Updated example using Execute
rather than Replace
]
While I am not completely clear on your usage you could use a function like this:
(
and )
is the first submatch).To understand the complete pattern, you may refer to the explanation on regex101.
Sub TestString()
MsgBox ReducedText("cfat dcat")
' results in: fat cat
MsgBox ReducedText("Sat all over the hat again")
' results in: at ver he at
End Sub
Function ReducedText(strIn As String) As String
Dim objRegex As Object
Dim objRegMC As Object
Dim objRegM As Object
Dim strOut As String
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.IgnoreCase = True
'not needed if matching the whole string
.Global = True
.Pattern = "\b[^a\s]([a-z]+)"
If .test(strIn) Then
Set objRegMC = .Execute(strIn)
For Each objRegM In objRegMC
strOut = strOut & objRegM.submatches(0) & vbNewLine
Next
ReducedText = strOut
Else
ReducedText = "Starts with A"
End If
End With
End Function