好的,所以我正在开发一个配置文件解析器,其中注释以#开头。 这是我到目前为止所提出的。
%{
#include <stdio.h>
%}
%%
#[\w]+ printf("something\n");
[0123456789]+ printf("NUMBER\n");
[a-zA-Z][a-zA-Z0-9]* printf("WORD\n");
%%
现在,在终端中,当我输入#comment时,输出是#WORD。任何人都可以解释原因吗?
答案 0 :(得分:1)
flex
正则表达式的文档位于flex manual。 Flex
不使用与Perl,Python,Ruby,Java甚至Posix标准实用程序相同的正则表达式(尽管它比其他实用程序更接近Posix)。特别是,如果您阅读文档,则不会找到任何引用\w
,\s
或其他任何已进入regexen的perl-isms的内容。
你会发现Posix等价物,所有这些都必须在角色类([...]
)内使用:[:alpha:]
,[:alnum:]
,[:space:]
等。
例如,要识别#后跟任何字母,数字或下划线字符序列,您可以使用以下模式:
#[[:alnum:]_]+
但是,您更有可能希望评论继续到行尾,而不仅仅是紧接着后续单词的结尾。正常的模式是:
#.*
,因为在Flex中,。与换行符不匹配。