我正在处理嵌套的评论。我想一次跳过尽可能多的无关字符。但模式<COMMENT>[^\n]{-}\//\*{-}\*/\/
是非法的。有什么建议吗?
更新:
鉴于以下情况:
/**comment* text/**comment text**/comment*/
在捕获第一个/*
后,它会进入COMMENT
条件。现在我希望尽可能多地使用一个匹配字符(不是/*
或*/
)。由于flex选择了最长的匹配项,因此我不知道如何匹配孤立的*
(不是*
后跟/
)和孤立的/
s。 \//\*
不是一个字符类,因此我们无法计算它与另一个类之间的差异。
答案 0 :(得分:0)
%%
"/\*" { printf("OPEN_COMMENT [%s]\n", yytext); }
"\*/" { printf("CLOSE_COMMENT [%s]\n", yytext); }
[^*/]+ { printf("TEXT [%s]\n", yytext); }
"\*" { printf("TEXT [%s]\n", yytext); }
"/" { printf("TEXT [%s]\n", yytext); }
%%
此处最长匹配规则有助于我们。想法是分别匹配独立的单个*
和/
符号,而所有其他文本都是批量使用的(因此不会降低性能)。
以上示例的结果:
OPEN_COMMENT [/*]
TEXT [*]
TEXT [comment]
TEXT [*]
TEXT [ text]
OPEN_COMMENT [/*]
TEXT [*]
TEXT [comment text]
TEXT [*]
CLOSE_COMMENT [*/]
TEXT [comment]
CLOSE_COMMENT [*/]
TEXT [
]