0

私はこの正規表現を持っています。

/(#LOG(\(.*?\))+\s+)(((ENTRY\([a-z]+\)+(\{[a-z]\})?))(.*?)(?=ENTRY|#END))+(\s*#END)/is

そして、次のテキスト。

#LOG(pid1234)(20052013)

  ENTRY(description)
    Some text


  ENTRY(description){info}
    Multiline 

    text


  ENTRY(description)
    More text

#END

もちろん、preg_match_all を使用して、すべての個々のエントリと最初の行を提供する素敵な配列を取得しようとしています。

最初と最後のグループを削除すると、個々のエントリが提供されますが、一貫性を確保するために最初と最後のグループが必要であり、最初の行は必要な情報を提供します。

私は運が悪いので、しばらくの間これをいじっています。私が達成しようとしていることには、少し異なる戦術が必要になる可能性があることに気付きましたが、それが何であるかはわかりません。

これを達成する方法はありますか?

4

1 に答える 1

0

PHP/PCRE に直接ではありません。C# と Perl で実行できます。C# では、すべてのグループがその一致をすべてキャプチャし、Perl では同じ効果が得られます。

あなたの場合、2つのパス/ステップでそれを行う必要があります(正規表現を使用している場合、パーサーは1つのパスでそれを行うことができます)。最初に適切なブロックに一致し#LOG#END次にそこからすべてのエントリを抽出します。

于 2013-05-25T00:10:58.257 に答える