[[20210910195520]] 『正規表現:括弧<>で囲まれた部分とそれ以外に分割』(中途B) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『正規表現:括弧<>で囲まれた部分とそれ以外に分割』(中途B)

 すみません。
 正規表現を初めて使うもので今一つ理解出来ておらず、ネットで調べながら書いてみたものの、
 Patternの記述がこれで合ってるのか、たまたま良さそうなだけなのか自信が無くて、確認頂きたいのです。

 「<」と「>」で囲まれている部分と、それ以外の部分に分けて、
 ニュアンスとしてはSplit関数の様な結果をMatchCollectionで得たい。というものです。

    Sub RegExpTest()
        Const ORG_STR = "a<123>de>F<><abc><g<>>>"
        Dim RegExp As RegExp, mc As MatchCollection, m As Match, i As Long
        Set RegExp = CreateObject("VBScript.RegExp")
        RegExp.IgnoreCase = True
        RegExp.Global = True
        RegExp.Pattern = "((<[^<>]*>)|(.+?(?=<))|(.+))"
        Set mc = RegExp.Execute(ORG_STR)
        For Each m In mc
            Debug.Print m.SubMatches.Count; m.FirstIndex; m.Length; Tab;
            For i = 0 To m.SubMatches.Count - 1
                Debug.Print i; m.SubMatches(i); Tab((i + 2) * 18);
            Next
            Debug.Print
        Next
    End Sub

 実行結果
 4  0  1       0 a                  1                 2 a               3                
 4  1  5       0 <123>              1 <123>           2                 3                
 4  6  4       0 de>F               1                 2 de>F            3                
 4  10  2      0 <>                 1 <>              2                 3                
 4  12  5      0 <abc>              1 <abc>           2                 3                
 4  17  2      0 <g                 1                 2 <g              3                
 4  19  2      0 <>                 1 <>              2                 3                
 4  21  2      0 >>                 1                 2                 3 >>             
                 ↑洩れなく           ↑「<」で始まり「>」で終わっているか
                   全ての文字が         「<」と「>」の間に「<」「>」は無い状態か
                   順番通りあるか

 つまらないお願いかとは存じますが、
 アドバイス宜しくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 済みません。
 題意をよく読まずに明後日なコメントをしてしまいました。反省。
 てっきり対応した括弧を得るという話かと。

 コードは問題ないものと思われました。

 |  ↑洩れなく全ての文字が順番通りあるか
 これは、(.+)があることで『全ての文字がある』を保証されているわけですね。

 なお、最後の<>は、それ自体が<>の中にあり、
 言わば第二階層の中にあるわけで、
 第一階層の中にある<123>や<abc>と性格が異なると言えば異なります。
 そこが(仕様として)少し気にはなりました。

(γ) 2021/09/11(土) 05:27


 γさんご確認頂きありがとうございました。

 ひとつひとつのメタ文字の役割はネットで調べられたんですが、
 組み合わせや、複数パターンになると頭がこんがらがってしまっておりました。

 <g<>>>
 の部分については、
 今回は少なくともネストが許容されない前提です。

 但し[<]から[>]までが1ペアというルールは決定なのですが、
 「間に[<]も[>]も無い」という部分については、実はまだ仕様を決めかねています。

 <g | <> | >> と分けるべきか
      ~~
 <g<> | >>    と分けるべきか、どっちかな?
 ~~~~
 という感じですが、
 そこはもう少し検証を重ねてみてからの判断になります。

 とりあえずこれで先に進められます。助かりました。
 ありがとうございました。

(中途B) 2021/09/11(土) 09:41


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.