正则表达式单独重复组匹配

时间:2013-05-24 23:39:01

标签: php regex

我有这个正则表达式。

/(#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一个很好的数组,它将为我提供所有单独的条目以及当然其他所有条目中的第一行。

如果我删除了第一组和最后一组它提供了单独的条目,但问题是我需要第一个和最后一个以确保一致性,而第一行提供了我需要的一些信息。

我一直在摆弄这一段时间,但没有运气。 我已经意识到我想要实现的目标可能需要一些不同的策略,但我无法弄清楚它是什么。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

不直接在PHP / PCRE中。它可以在C#和Perl tho中完成。在C#中,每个组都将捕获它的所有匹配项,而在Perl中,您可以获得相同的效果。

在你的情况下,你必须在两个通道/步骤中进行(如果使用正则表达式,解析器可以在一次通过中完成)。首先匹配正确的#LOG#END块,然后从中提取所有条目。