Regex 正则表达式,用于前面有#

Regex 正则表达式,用于前面有#,regex,flex-lexer,Regex,Flex Lexer,好的,我正在研究一个配置文件解析器,其中注释以#开头。 这是我到目前为止的想法 %{ #include <stdio.h> %} %% #[\w]+ printf("something\n"); [0123456789]+ printf("NUMBER\n"); [a-zA-Z][a-zA-Z0-9]* printf("WORD\n"); %% %{ #包括 %} %% #[\w]+printf(“某物”); [0123

好的,我正在研究一个配置文件解析器,其中注释以#开头。 这是我到目前为止的想法

%{
#include <stdio.h>
%}

%%
#[\w]+                  printf("something\n");
[0123456789]+           printf("NUMBER\n");
[a-zA-Z][a-zA-Z0-9]*    printf("WORD\n");
%%
%{
#包括
%}
%%
#[\w]+printf(“某物”);
[0123456789]+printf(“编号”);
[a-zA-Z][a-zA-Z0-9]*printf(“WORD\n”);
%%

现在,在终端中,当我输入#comment时,输出是#WORD。有人能解释一下原因吗?

有关
flex
正则表达式的文档位于
Flex
不使用与Perl、Python、Ruby、Java甚至Posix标准实用程序相同的正则表达式(尽管它比其他工具更接近Posix)。特别是,如果您阅读文档,您将找不到对
\w
\s
或任何其他已潜入regexen的perl ISM的任何引用

您将发现Posix等价物,所有这些都必须在字符类中使用(
[…]
):
[:alpha://code>,
[:alnum://code>,
[:space://code>,等等

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

#[[:alnum:]_]+
但是,更可能的情况是,您希望注释继续到行的末尾,而不仅仅是到紧跟其后的单词的末尾。通常的模式是:

#.*

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

你是否试图逃避它:
\\\[\w]+
?我想你的意思是
\.+
\[\w]+
@CasimiretHippolyte,把它作为一个答案,我将它标记为正确。谢谢该死我曾经编写过ocamlexx代码,从未考虑过regex术语可能会在不同语言之间发生变化这一事实。我真傻。