我一直试图删除除 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}
解析 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]$
请注意,我给出的第一个示例被拒绝(未解析),第二个示例被接受。
关于c - 删除 Lex/flex 中除 Number 之外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25541033/