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 中,您可以获得相同的效果。

在您的情况下,您必须分两遍/步骤来完成(如果使用正则表达式,解析器可以一次性完成)。首先匹配一个#LOG#END阻止的属性,然后从中提取所有条目。

于 2013-05-25T00:10:58.257 回答