删除除Lex / flex中的数字以外的所有内容

时间:2014-08-28 05:01:04

标签: c flex-lexer lex

我试图删除除Number之外的所有内容(使用Lex)。然后在下一个过程中使用结果编号。

Exp:输入1:abcde1!"2#$34qwesd - >预期产出:1234

我的正则表达但它没有成功:

DIGIT        [0-9]
%%
[^{DIGIT}-]+        {};

任何建议都会有所帮助。

编辑:

但是当我为下一个过程添加一些正则表达式时,它不再工作了。你知道为什么吗?

像这样:

%% 

{NON_DIGIT}+ 

^(0{DIGIT}{1,4})[- ]({DIGIT}{1,4})[- ]({DIGIT}{4})$ { 
        printf("Well formed: [%s]\n", yytext); 
        return 0;
}

1 个答案:

答案 0 :(得分:1)

最小的工作示例:

%%
[^0-9]+    // Just leave it blank 

测试它:flex test.lex && gcc lex.yy.c -lfl && ./a.out
对于像标识符这样的东西,可以这样做:

NONDIGIT    [^0-9]
%%
{NONDIGIT}+    // Just leave it blank 

EDITED:

在您的新示例中,我猜您要使用不正确的表达式1来解析4{1,4}。使用(1|4)[14]即可完成工作 例如:

DIGIT       [0-9]
NON_DIGIT   [^0-9]
%%
^(0{DIGIT}(1|4))[- ]({DIGIT}[14])[- ]({DIGIT}4)$ {
        printf("Well formed: [%s]\n", yytext);
        return 0;
    }

测试:

[pengyu@GLaDOS tmp]$ flex a.lex && gcc lex.yy.c -lfl && ./a.out 
014 21 -94
014 21 -94
014 21-94
Well formed: [014 21-94]
[pengyu@GLaDOS tmp]$ 

请注意,我给出的第一个示例被拒绝(未解析),第二个示例被接受。