空白的lex扩展失败了

时间:2014-08-22 17:16:27

标签: regex flex-lexer lex

我想要一条规则来匹配除空白之外的所有内容:

[^ \t\n\r\f\v] {}

但我想使用扩展:

BLANK [ \t\n\r\f\v]
%%
[^{BLANK}] {}

但扩张失败了。

我可以做[^[:space:]],但我想知道为什么扩展不起作用。

为什么呢?我该如何扩展它?

1 个答案:

答案 0 :(得分:1)

因为您无法在字符类中展开名称。

  

请注意,在字符类内部,所有正则表达式   运营商失去了他们的特殊意义,除了逃避(\)和   字符类操作符,-],以及在开头的   class,^

(引自Flex manual section on Patterns,靠近底部。)

换句话说,名称扩展{name}是正则表达式中的术语。这不是宏观扩张。

顺便说一下,在大多数情况下,名称的扩展都用括号括起来。 (你可以在example in the flex manual中看到。)