次の(Delphi RTTI出力)を名前空間区切り文字で分割しようとしています.
:
System.Generics.Collections.TEnumerator<Utils.TPair<System.string,System.string>>
正しい分割はです[System, Generics, Collections, TEnumerator<Utils.TPair<System.string,System.string>>]
。
最初にネガティブな先読みを試しましたが、それはの期間と左端の\.(?!\<*[a-zA-Z0-9_.,]*\>)
両方に一致しました。私は少し驚いています、私はそれが(正しく)の期間と一致したことを付け加えるかもしれません。これは、正規表現言語の私のコマンドの証拠だと思います。Utils.TPair
System.string
Collections.TEnumerator
そこで、次のように言って「貪欲」にしようとし\.(?!\<*[a-zA-Z0-9_.,<>]*\>)
ましたが、一致するものが見つかりませんでした。(これは、regexersが「貪欲」と言うときに通常意味することではないことを私は知っていますが、私はより適切な説明を思い付くことができませんでした。)
そこで、最初からやり直すことにしました。私が理解している限り、私は自分のケースを解決するためにネガティブなルックアラウンドを使用できるはずです。特に、次の一致<
は事実上無視できます。だから私は(?<!\<[a-zA-Z0-9_]*)\.
自分の問題を解決すべきだと決めました。そうではありません。これはおそらく、(多くの)ネガティブルックビハインド実装が可変長文字列をサポートしていないという事実によるものです。(具体的には、PCRE-基本的にDelphiが使用するものであり、明らかに可変長の代替をサポートします。ただし、すべての代替は実行時に修正する必要があります。)
したがって、私はあなた、コミュニティに目を向けます。
誰かがこの問題に光を当てることができますか?それは実際には非常に単純なはずです。素晴らしいことだ!