问题描述
%{
#include "question.tab.h"
%}
%%
COMMON(/[45]\.0)? return GOTCHA;
[a-z]+ return ETC;
%%
并尝试编译。(flex -d question.l
)
然后输出如下。
question.l:7: unrecognized rule
question.l:7: unrecognized rule
question.l:7: unrecognized rule
question.l:7: unrecognized rule
question.l:7: unrecognized rule
question.l:7: unrecognized rule
question.l:7: unrecognized rule
question.l:7: unrecognized rule
question.l:7: unrecognized rule
question.l:7: unrecognized rule
我希望 flex
在捕获到 GOTCHA
、COMMON
、COMMON/4.0
时返回 COMMON/5.0
。
我应该修复正则表达式的哪一部分?
感谢您的提前。
解决方法
/
符号是 flex 中的一个特殊字符。它用于前瞻,您使用它的方式是非法的(flex 只允许在表达式的最后进行前瞻,而不是在组内)。
由于您实际上并不想要前瞻,而是要匹配字面斜杠,您应该将其放在引号中或使用反斜杠将其转义。