I have created the following Regular expression in javascript to test if the string works.
var str = "Test [abc] =1234= (PG1/2)"; var pattern = /[[]/; var pattern1 = /[]]/; var pattern2 = /[=?]/; var pattern3 = /[(]+[A-z0-9/]+[)]/; var result = str.replace(pattern1, "").replace(pattern,"").replace(pattern2, "[").replace(pattern2,"]").replace(pattern3,"");
which works perfectly fine. However no i have tried to convert this SQL (using the ms access sample database)
i have tried the following which hasn’t worked as i get an error.
UPDATE Orders SET Orders.ShipName=replace(replace( Orders.ShipName, "/[[]/", ''), "/[]]/",'');
which didn’t work. I think I’ve gone about the wrong approach to the SQL. can anyone advise on the correct way to do this? as all of the replaces are required to be executed on the Orders.ShipName field. Is this even possible?
Advertisement
Answer
The standard Replace() function in Access does not support pattern matching using regular expressions, but you could “roll your own” in VBA quite easily:
Option Compare Database Option Explicit Public Function MyRegexReplace( _ originalText As Variant, _ regexPattern As String, _ replaceText As String) As Variant ' VBA Project Reference required: ' Microsoft VBScript Regular Expressions 5.5 Dim rtn As Variant Dim objRegExp As RegExp, objMatch As Match, colMatches As MatchCollection rtn = originalText If Not IsNull(rtn) Then Set objRegExp = New RegExp objRegExp.pattern = regexPattern Set colMatches = objRegExp.Execute(originalText) For Each objMatch In colMatches rtn = _ Left(rtn, objMatch.FirstIndex) & _ replaceText & _ Mid(rtn, objMatch.FirstIndex + objMatch.length + 1) Next Set objMatch = Nothing Set colMatches = Nothing Set objRegExp = Nothing End If MyRegexReplace = rtn End Function
Some VBA test code for the example in your question would be
Private Sub testcode() Dim str As String Dim pattern As String, pattern1 As String, pattern2 As String, pattern3 As String Dim result As String str = "Test [abc] =1234= (PG1/2)" pattern = "[[]" pattern1 = "[]]" pattern2 = "[=?]" pattern3 = "[(]+[A-z0-9/]+[)]" result = str result = MyRegexReplace(result, pattern1, "") result = MyRegexReplace(result, pattern, "") result = MyRegexReplace(result, pattern2, "[") result = MyRegexReplace(result, pattern2, "]") result = MyRegexReplace(result, pattern3, "") Debug.Print result ' Test abc [1234] End Sub
If you needed to perform multiple “inline” replacements in a query you could still nest the calls to your function as you did before:
UPDATE Orders SET ShipName = MyRegexReplace(MyRegexReplace(ShipName, "[]]", ""), "[[]", "")
For more details on Microsoft Regular Expressions see:
How To Use Regular Expressions in Microsoft Visual Basic 6.0