Jflex捕捉比赛

时间:2013-10-27 09:23:31

标签: regex jflex

我正在使用JFlex,我希望匹配以下内容:

|MATCHED|NOTMACHED|
|NOTMACHED|NOTMACHED|NOTMACHED|
<newline>
|MATCHED|NOTMACHED|
|NOTMACHED|NOTMACHED|NOTMACHED|

我的模式:

 FIXTURE_NAME_PATTERN=[^\|]\n\|[A-Za-z]+\|


 <YYINITIAL> {FIXTURE_NAME}
  { yybegin(YYINITIAL); return FitnesseTypes.FIXTURE_NAME; }

但它匹配管道“|”以及前一行(空格)。我试图使用捕获,但我不能让这个工作。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

你想要使用状态。定义一个状态,如

%state AFTER_NEWLINE

在您的州定义中。

然后,在你的词汇定义中,你会有这样的东西:

<YYINITIAL>\n
{ yybegin(AFTER_NEWLINE); }

<AFTER_NEWLINE>|
{ /*Do whatever you want with pipes*/ }

<AFTER_NEWLINE>[A-Za-z]
{ yybegin(YYINITIAL); return FitnesseTypes.FIXTURE_NAME; }

//Any other lexical definitions you might need

这基本上做的是每次点击新行时,它将状态设置为AFTER_NEWLINE。然后,它匹配下一次一串字母连续显示,并将状态设置回YYINITIAL。管道被扔掉了。