在我的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
你能告诉我我的规则失败了吗?
答案 0 :(得分:1)
这个怎么样:
[A-Za-z]+[A-Za-z0-9]*([/]+[A-Za-z][A-Za-z0-9]*)*
用()替换[],表示一个组。
请注意,它会匹配foo////bar
,如果您不希望删除第二个+
(以及第一个+
,那么在这种情况下它就没用了)。