在 Flex 中定义模板

Defining a Template in Flex

我想在flex中定义一个"KEYER",也就是“[]”中的一个"KEY"。一个"KEY"是以一个字母和一串字母、数字和后面的字符开头:“~_'?$.-”。 我定义:

keyChar         ([a-zA-z0-9~_'?$. \-])
letter          ([a-zA-Z])
key             ({letter}{keyChar}+)
keyer           ("["{key}"]") 

和:

<*>{keyer}        print("KEYER");

不知何故输入:

[keyer1] [keyer2] [keyer 3]

读作一个 KEYER 而不是三个。我做错了什么?

您在 keyChar 的模式中写了 A-z 而不是 A-Z[A-z] 包括 Za 之间的字符,其中包括方括号。

总的来说,在不必要的时候最好避免使用范围表达式。我会写:

keyChar         ([[:alnum:]~_'?$. -])
key             ([[:alpha:]]{keyChar}+)
keyer           ("["{key}"]")