在 lex 上定义表达式不适用于某些字母

define expression on lex doesn't work on some letters

我已经在终端中安装了 flex
OS: ubuntu 15.10

character [a-z|A-Z]
digit [0-9]
digits {digit}{digit}+
string [{digit}+{character}+{digit}*{character}*]*

%%
{string} printf("string ");
%%

编译代码后,对于输入"gg",输出为"string"。
对于输入"ff",输出为"ff"。

我正在这样编译文件:

lex file_name.txt
cc lex.yy.c -o file_name.out 

如果我这样定义字符串:

string ({digit}+{character}+{digit}*{character}*)*

它工作正常。

什么原因?
不让我用C语言

这一行

string [{digit}+{character}+{digit}*{character}*]*

做了一些与您预期不同的事情。它是包含在 [] 中的 个字符 的零次或多次出现。也就是说,它等同于这些更简单的模式:

string [{}digit+character+*]*
string [{}digtchare+*]*

(除非我有错别字)。跟这个不一样:

string ({digit}+{character}+{digit}*{character}*)*

这是 ().

中包含的 模式 的零次或多次重复