我正在写一个语法来解析一个日志文件,看起来像这样:
V9013_MURGIN_AE_7340057[01/10/2013 10:07:33]:DEBUG:<PCDATA>
V9013_MURGIN_AE_7340057[01/10/2013 10:07:33]:DEBUG:<PCDATA>
etc...
其中PCDATA
可以包含任何符号(包括n
), '7340057'是一个PID(进程id)。
问题是,如何描述PCDATA
的结束?
我不能说不需要匹配任何东西,直到你看到一个V9013_MURGIN_AE_7340057
,因为那是PID,它在日志文件中改变,所以我不能硬编码它的值到语法中。
是否有这样的方法:
- 我第一次匹配
7340057
(或任何它在当前文件),放入某个变量,比如$PID
- 描述
PCDATA
为非贪婪(.)*
匹配直到$PID
,也就是说,是否有可能有一个变量(参数化)令牌定义?
我同意不使用ANTLR的建议。
然而,我以前处理这个问题的方法(相当低效)是这样的:
pcdata : (PID)=> () | . pcdata ;