我有一个 myRegex 函数从字符串中提取正则表达式。当我运行使用该函数的查询时,我在多行上出现以下错误。
找不到方法或数据成员。
这是正则表达式功能:
Function myRegex(ByRef myString As String, ByVal pattern As String) As String
Dim rgx As New RegExp
Dim colMatches As MatchCollection
With rgx
.pattern = pattern
.ignoreCase = True
.Global = False
.Multiline = False
Set colMatches = .Execute(myString)
End With
If colMatches.Count > 0 Then
myRegex = colMatches(0).Value
Else
myRegex = ""
End If
End Function
这是我使用的查询:
SELECT myRegex(phone,"[0-9]+")
FROM table1
我检查了以下参考库:
答案 0 :(得分:4)
以下一行
Dim rgx As New RegExp
...将RegExp
与定义该类的第一个库匹配,即
Microsoft VBScript Regular Expressions 1.0
这是一个不支持Multiline
属性的旧版本。您需要RegExp
类来自:
Microsoft VBScript Regular Expressions 5.5
所以:
RegExp
课程视为VBScript_RegExp_55.RegExp
,或CreateObject("VBScript.RegExp")
答案 1 :(得分:2)
您可以取消选中第一个VBScript正则表达式引用... 1.0版本...作为@trincot suggests。
或者你可以取消选中这两个引用并使用后期绑定:
'Dim rgx As New RegExp
Dim rgx As Object
Set rgx = CreateObject("VBScript.RegExp")
但是,由于您的查询将重复调用该函数,因此您可能会注意到Static
对象变量具有更好的性能。
Function myRegex(ByRef myString As String, ByVal pattern As String) As String
Static rgx As Object
Dim colMatches As Object
If rgx Is Nothing Then
' create the RegExp object just once
Set rgx = CreateObject("VBScript.RegExp")
With rgx
.ignoreCase = True
.Global = False
.Multiline = False
End With
End If
rgx.pattern = pattern
Set colMatches = rgx.Execute(myString)
If colMatches.Count > 0 Then
myRegex = colMatches(0).Value
Else
myRegex = ""
End If
End Function