在lex / flex中的状态内使用^(插入符号)

时间:2013-04-30 23:01:35

标签: regex lex flex-lexer

我会首先提出我的lex代码(仅限lex body)。

%%
ps     {BEGIN STATE1;}
.      ;
<STATE1>^[0-9]  print("number after ps".)

使用此代码我试图在字母“ps”之后匹配一个数字。这就是我使用^字符的原因。 但是代码与任何正确的字符串都不匹配,例如ps3,ps4fd,ps554等。 然后我删除了^然后尝试但是它工作但也匹配像pserd7,psfh45,psfhdjh4er等字符串。

我知道我可以在不使用状态的情况下解决问题(ps [0-9]。*)。但我必须与各州一起做这件事。我怎样才能解决这个问题?感谢....

1 个答案:

答案 0 :(得分:2)

  

使用此代码我试图在字母“ps”之后匹配一个数字。这就是为什么我用^字符

但^并不意味着。这意味着'开始行'。

  

我知道我可以在不使用状态的情况下解决问题(ps [0-9]。*)。但我必须与各州合作。

为什么呢?非常奇怪的要求。

您需要添加更多规则以涵盖其他可能性。例如:

<STATE1>. { BEGIN INITIAL; }

但这取决于在'ps'之后还有什么是合法的。