访问无法识别正则表达式多行选项

时间:2016-06-28 15:34:14

标签: vba ms-access access-vba

我有一个 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

我检查了以下参考库:

  • Microsoft VBScript Regular Expressions 1.0
  • Microsoft VBScript Regular Expressions 5.5

2 个答案:

答案 0 :(得分:4)

以下一行

Dim rgx As New RegExp

...将RegExp与定义该类的第一个库匹配,即

Microsoft VBScript Regular Expressions 1.0

这是一个不支持Multiline属性的旧版本。您需要RegExp类来自:

Microsoft VBScript Regular Expressions 5.5

所以:

  • 删除旧版1.0参考库的链接,或
  • 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