我有这个正则表达式。
/(#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一个很好的数组,它将为我提供所有单独的条目以及当然其他所有条目中的第一行。
如果我删除了第一组和最后一组它提供了单独的条目,但问题是我需要第一个和最后一个以确保一致性,而第一行提供了我需要的一些信息。
我一直在摆弄这一段时间,但没有运气。 我已经意识到我想要实现的目标可能需要一些不同的策略,但我无法弄清楚它是什么。
有没有办法实现这个目标?
答案 0 :(得分:0)
不直接在PHP / PCRE中。它可以在C#和Perl tho中完成。在C#中,每个组都将捕获它的所有匹配项,而在Perl中,您可以获得相同的效果。
在你的情况下,你必须在两个通道/步骤中进行(如果使用正则表达式,解析器可以在一次通过中完成)。首先匹配正确的#LOG
到#END
块,然后从中提取所有条目。