VBA正则表达式匹配日期

HK1*_*HK1 0 regex vbscript vba

我是正则表达式的新手,我很难获得我在网上找到的模式在VBScript/VBA中工作.这个应该返回一个字符串中找到的日期,但它找不到任何日期.VBScript/VBA与其他RegEx引擎的不同之处是什么使得它无法返回匹配?

Edit1
我从我的模式中删除了^和$.问题依然存在.

Private Sub TestDate()
    MsgBox RegExDate("cancel on 12/21/2010 ")
End Sub

Private Function RegExDate(s As String) As String
    Dim re, match
    Set re = CreateObject("vbscript.regexp")
    re.Pattern = "(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))"
    re.Global = True

    For Each match In re.Execute(s)
        MsgBox match.value
        RegExDate = match.value
        Exit For
    Next
    Set re = Nothing
End Function
Run Code Online (Sandbox Code Playgroud)

ipr*_*101 6

如果您传递给它的整个字符串是一个日期,您的RegEx似乎只会找到匹配项.

尝试删除^$

以下是使用RegEx重新编写的示例,它将以mm/dd/yyyy和mm-dd-yyyy格式查找日期 -

Private Sub TestDate()
    MsgBox RegExDate("cancel on 12/21/2010 ")
End Sub

Private Function RegExDate(s As String) As String
    Dim re, match
    Set re = CreateObject("vbscript.regexp")
    re.Pattern = "(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)[0-9]{2}"
    re.Global = True

    For Each match In re.Execute(s)
        MsgBox match.Value
        RegExDate = match.Value
        Exit For
    Next
    Set re = Nothing
End Function
Run Code Online (Sandbox Code Playgroud)


Rob*_*upt 5

为什么不使用RegEx来获取看起来是日期的字符串部分并使用IsDate函数来验证它?

Function FormatOutput(s)
    Dim re, match
    Set re = CreateObject("vbscript.regexp")
    re.Pattern = "[\d]+[\/-][\d]+[\/-][\d]+"
    re.Global = True

    For Each match In re.Execute(s)
        if IsDate(match.value) then
            FormatOutput = CDate(match.value)
            Exit For
        end if
    Next
    Set re = Nothing

End Function
Run Code Online (Sandbox Code Playgroud)

RegEx可以被清除一点,但它适用于您当前的示例.