私は正規表現を持っています。これには、必須の名前付きキャプチャ グループと、いくつかのオプションの名前付きキャプチャ グループが含まれています。個々の一致をキャプチャし、セクションを必要な名前付きグループに解析します。
ただし、今は繰り返す必要があります。
基本的に、私の正規表現は、(潜在的に) はるかに長い文字列内の単一の原子単位を表します。私の正規表現と正確に一致する代わりに、ターゲット文字列には通常、ドット「.」で区切られた正規表現の繰り返しインスタンスが含まれます。キャラクター。
たとえば、これが私の正規表現がキャプチャするものである場合:<some match>
実際の文字列は、次のいずれかのようになります。
<some match>
<some match>.<some other match>
<some match>.<some other match>.<yet another match>
ドットを無視しながら、繰り返しパターンを説明するために、元の正規表現を変更する最も簡単な方法は何ですか?
実際に必要かどうかはわかりませんが、個々のセグメントをキャプチャするために使用している正規表現を次に示します。繰り返しになりますが、オプションの追加セグメントを考慮してこれを強化したいと思います。結果セットで各セグメントを別の「一致」として表示したいと思います。
^(?<member>[A-Za-z_][A-Za-z0-9_]*)(?:\[(?<index>[0-9]+)\])?(?:\[(?<index2>[0-9]+)\])?(?:\[(?<index3>[0-9]+)\])?$
最大 3 つのオプションのインデックス アクセサーを使用して、クラス パスを解析することを目的としています。(すなわち " member.sub_member[0].sub_sub_member[0][1][2]
")
答えには先読みまたは後読みが含まれているのではないかと思いますが、それについては私はよく知りません。
現在、String.Split を使用して文字列セグメントを分離しています。しかし、正規表現の拡張が十分に単純である場合は、余分な分割ステップをスキップし、正規表現を検証メカニズムとして再利用することも考えています。
編集:
ギアの追加のレンチとして、ドット「.」を禁止したいと思います。文字列の先頭または末尾の文字。これらは、パス セグメント間のセパレータとしてのみ存在する必要があります。