判决的正则表达式以#开头

时间:2014-09-09 14:17:00

标签: regex flex-lexer

好的,所以我正在开发一个配置文件解析器,其中注释以#开头。 这是我到目前为止所提出的。

%{
#include <stdio.h>
%}

%%
#[\w]+                  printf("something\n");
[0123456789]+           printf("NUMBER\n");
[a-zA-Z][a-zA-Z0-9]*    printf("WORD\n");
%%

现在,在终端中,当我输入#comment时,输出是#WORD。任何人都可以解释原因吗?

1 个答案:

答案 0 :(得分:1)

flex正则表达式的文档位于flex manualFlex 使用与Perl,Python,Ruby,Java甚至Posix标准实用程序相同的正则表达式(尽管它比其他实用程序更接近Posix)。特别是,如果您阅读文档,则不会找到任何引用\w\s或其他任何已进入regexen的perl-isms的内容。

你会发现Posix等价物,所有这些都必须在角色类([...])内使用:[:alpha:][:alnum:][:space:]等。

例如,要识别后跟任何字母,数字或下划线字符序列,您可以使用以下模式:

#[[:alnum:]_]+

但是,您更有可能希望评论继续到行尾,而不仅仅是紧接着后续单词的结尾。正常的模式是:

#.*

,因为在Flex中,与换行符不匹配。

相关问题