我正在使用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; }
但它匹配管道“|
”以及前一行(空格)。我试图使用捕获,但我不能让这个工作。有什么建议吗?
答案 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。管道被扔掉了。