2019年1月11日金曜日

番外編:Excel VBAで正規表現

VBAで正規表現を使ってみるテスト

SubMatchをつかって、グループ化した正規表現にマッチする文字列を拾い出す

Sub RegExpr()
'正規表現のテスト
'正規表現をグループ化して、submatchで取り出す
    '正規表現を使うときに使う変数類
    Dim RE As Object
    Dim Match, Matches, Matches2

    Dim STR As String
    Dim i As Integer

    Set RE = CreateObject("VBScript.RegExp")

    STR = "aaa000bbb111"

    RE.Pattern = "(^.)(..)..(.+$)"
    RE.ignorecase = True
    RE.Global = True

    Set Matches = RE.Execute(STR)
    Debug.Print Matches.Count
    Debug.Print Matches.Item(0)
    If Matches.Count > 0 Then
    
        Set Matches2 = Matches(0).SubMatches
        Debug.Print Matches2.Count
        For i = 0 To Matches2.Count - 1
            Debug.Print Matches2(i)
        Next
    
    End If

End Sub


これの実行結果は、以下。イミディエイトウィンドウに出力されます。
     1 
    aaa000bbb111
     3 
    a
    aa
    0bbb111


最初の1はDebug.Print Machtes.Countの出力で、RE.Patternで与えているパターン全体にマッチした回数が1であることを示しています。次の行は、与えたパターンでパターンマッチを行ってマッチした文字列全体です。

括弧でくくられた文字列グループにマッチした文字列は

set Matches2 = Matches(0).SubMatches

で取得され、Matches2コレクションに格納されます。これをFor Next文で取り出しています。

次の3は括弧でくくられた文字列グループ何個にマッチしたかを示しています。Debug.Print Matches2.Countの出力です。

(^.)は行頭の1文字、(..)は行頭の1文字に続く2文字、..で2文字置いて(.+$)で1文字以上で行末まで続く任意の文字にマッチして、それがSubMatchに格納されます。

0 件のコメント:

コメントを投稿

コメントを頂ければ幸いです。