2016-06-28 64 views
2

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

我有以下参考库检查:

  • 微软的VBScript正则表达式1.0
  • 微软的VBScript正则表达式5.5

回答

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")
2

Yo你可以取消选中第一个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