c - 删除 Lex/flex 中除 Number 之外的所有内容

标签 c flex-lexer lex

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

Exp: 输入: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;
}

最佳答案

一个最小的工作示例:

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

测试一下:flex test.lex && gcc lex.yy.c -lfl && ./a.out
对于使用标识符之类的东西,可以这样做:

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

编辑:

在您的新示例中,我猜您想使用表达式 {1,4} 解析 14 ,这是不正确的。使用 (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]$ 

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

关于c - 删除 Lex/flex 中除 Number 之外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25541033/

相关文章:

CMSIS FIR 带通滤波器

c - flex中的正则表达式有错误

c - 莱克斯/Yacc : "line 1: syntax error, unexpected $end, expecting FUNCTION" lex compile error

c - 如何在 lex 中为 c 类型整数编写正则表达式?

c - 用于字母数字的 flex RE 也会打印 #$@

c - YACC : symbol **** is used but, 未定义为 token ,没有规则

c - 使用转义字符的 Flex/Lex 编码字符串

无法使 C 中的函数正常执行

C 表达式在两个不同的编译器上的计算方式不同

c - 为什么要区分 .rel.text 和 .rel.data 部分?