flex 正则表达式使用带有尾随上下文的 {-}

flex regex use {-} with trailing context

我正在处理嵌套评论。我想一次跳过尽可能多的不相关字符。但是模式 <COMMENT>[^\n]{-}\//\*{-}\*/\/ 是非法的。有什么建议吗?

更新:
给定以下情况:

/**comment* text/**comment text**/comment*/

捕获第一个/*后,进入COMMENT状态。现在我想用一场比赛吃掉尽可能多的字符(不是 /**/)。由于 flex 选择最长的匹配,我不知道如何匹配孤立的 *s(不是 * 后跟 /)和孤立的 /s。而 \//\* 不是一个字符 class,所以我们无法计算它与另一个 class.

之间的差异
%%
"/\*"              { 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); }
%%

这里 longest-match 规则 帮助 我们。想法是分别匹配 free-standing 单个 */ 符号,同时批量消耗所有其他文本(因此不会降低性能)。

以上示例的结果:

OPEN_COMMENT [/*]
TEXT [*]
TEXT [comment]
TEXT [*]
TEXT [ text]
OPEN_COMMENT [/*]
TEXT [*]
TEXT [comment text]
TEXT [*]
CLOSE_COMMENT [*/]
TEXT [comment]
CLOSE_COMMENT [*/]
TEXT [
]