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 $

ここでは、日付をmm/dd/yyyyおよびmm-dd-yyyyの形式で検索するRegExを使用してリワークした例を示します。

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,
必要とされた変更の説明また、どのようにこれを(mm/dd/yyyy)または(mm-dd-yyyy)にするかについてのアイデアはありますか?
追加された 著者 HK1,
私はあなたのコードサンプルで新しいRegExを使って答えを更新しましたが、あまりにも具体的なのかどうかはわかりません。
追加された 著者 ipr101,
それはすでにmm-dd-yyyyを見つけるでしょう、残念は最後のコメントにそれを入れておくべきです
追加された 著者 ipr101,
それは無効な日付にも一致します。 2月31日
追加された 著者 pastacool,
これはダッシュで区切られた日付を検索しますか?しかし、ええ、返された文字列をテストすることは確かにこの場合OKです。
追加された 著者 HK1,
パターンを更新しました。 /または - 日付区切り文字と一致します。
追加された 著者 Rob Haupt,
素晴らしい答え!正規表現に常に問題があります:-s
追加された 著者 keun,