【问题标题】:flex regex not matching properlyflex 正则表达式不正确匹配
【发布时间】:2011-06-08 14:03:31
【问题描述】:

在我的标记器 (.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

你能告诉我我的规则在哪里失败吗?

【问题讨论】:

    标签: regex bison flex-lexer


    【解决方案1】:

    这个呢:

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

    将 [] 替换为 () 表示组。

    请注意,它将匹配foo////bar,如果您不想删除第二个+(同样删除第一个+,在这种情况下它是无用的)。

    【讨论】:

    • 这很明显。我认为[] 工作相同。我一定累了,谢谢;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    相关资源
    最近更新 更多