【发布时间】:2016-01-15 10:41:54
【问题描述】:
我正在处理嵌套的 cmets。我想一次跳过尽可能多的不相关字符。但是模式<COMMENT>[^\n]{-}\//\*{-}\*/\/ 是非法的。有什么建议吗?
更新:
鉴于以下情况:
/**comment* text/**comment text**/comment*/
捕获第一个/*后,进入COMMENT条件。现在我想在一场比赛中吃掉尽可能多的字符(不是/* 或*/)。由于 flex 选择最长的匹配,我不知道如何匹配隔离的*s(不是*,后跟/)和隔离的/s。而且\//\*不是一个字符类,所以我们无法计算它和另一个类的区别。
【问题讨论】:
-
您能否提供您想用自然语言编写的正则表达式的描述?例如,这种组合
\*{-}\*是无效的,但即使你将它修改为有效的[\*]{-}[\*],它也没有任何意义,因为它是一个空集......另外请注意,你不能只匹配嵌套的 cmets 与 single正则表达式——它们需要上下文无关的语法匹配器。 -
@gudok 谢谢你的帮助,我已经更新了问题。很抱歉没有澄清它。
-
这个答案可能很有用:stackoverflow.com/a/34515078/1566221
标签: flex-lexer