VBA Рэгулярнае выраз для даты

Я пачатковец у рэгулярных выразаў і ўзнікаюць цяжкасці атрымання мадэляў, якія я знаходжу ў Інтэрнэце, каб працаваць у VBScript/VBA. Гэта адзін павінен вяртаць дату знойдзенай у радку, але ён не можа знайсці якую-небудзь дату. Што VBScript/VBA зрабіць адрозніваецца ад іншых RegEx рухавікоў, што робіць гэта не ў стане вярнуць матч?

Edit1
I removed the ^ and the $ from my pattern. The problem persists.

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
0

2 адказы

Гэта выглядае так, як калі ваш RegEx будзе толькі знайсці матч, калі ўвесь радок, якую вы прайсці да яе дату.

Try removing ^ and $

Вось ваш прыклад перапрацаваны з выкарыстаннем рэгулярных выразаў, якія будуць знаходзіць даты ў мм/дд/гггг і дд-мм-гггг фарматаў -

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
6
дададзена
Вялікае прапанову, але гэта не вырашае праблему.
дададзена аўтар HK1, крыніца
Любое тлумачэнне змяненняў, якія былі неабходныя? Акрамя таго, любыя ідэі аб тым, як зрабіць гэтую знаходку (мм/дд/гггг) або (дд-мм-гггг)?
дададзена аўтар HK1, крыніца
Я абнавіў адказ з новым RegEx ў вашым прыкладзе кода, не ўпэўнены, калі гэта занадта спецыфічныя, хоць?
дададзена аўтар ipr101, крыніца
Ён ужо знайсці дд-мм-гггг, прабачце павінны пакласці, што ў апошнім каментары
дададзена аўтар ipr101, крыніца
ведаць, што будзе таксама адпавядаць недапушчальныя даты напрыклад. 31 лютага
дададзена аўтар pastacool, крыніца
Ці будзе гэта знайсці даты, падзеленыя працяжнік? Але так, тэставанне радкі, што вяртаецца вядома OK ў гэтым выпадку.
дададзена аўтар HK1, крыніца
Абноўлены шаблон. ён будзе адпавядаць на/або - для падзельнікаў.
дададзена аўтар Rob Haupt, крыніца
Вялікі адказ! Заўсёды ўзнікаюць праблемы з рэгулярнымі выразамі: -s
дададзена аўтар keun, крыніца