flex正则表达式没有正确匹配

时间:2011-06-08 14:03:32

标签: regex bison flex-lexer

在我的tokenizer(.lex)文件中,我想匹配以下模式:

AaBC12/awD41/dfs21 etc...

我写过这条规则

[A-Za-z]+[A-Za-z0-9]*[[/]+[A-Za-z][A-Za-z0-9]*]* 
{lline = cpflineno;cpflval.str = strdup(cpftext);return K_IDENTIFIER;}

这条规则对我来说似乎是对的,但如果我有这样的输入:

TOP/MD1 
TOP/MD2
TOP/MD2/D/E

我的输出是

TOP/MD1
TOP/MD2
TOP/MD2
/D/E  

而不是

TOP/MD1
TOP/MD2
TOP/MD2/D/E

你能告诉我我的规则失败了吗?

1 个答案:

答案 0 :(得分:1)

这个怎么样:

[A-Za-z]+[A-Za-z0-9]*([/]+[A-Za-z][A-Za-z0-9]*)* 

用()替换[],表示一个组。

请注意,它会匹配foo////bar,如果您不希望删除第二个+(以及第一个+,那么在这种情况下它就没用了)。