我试图删除除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;
}
答案 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
在您的新示例中,我猜您要使用不正确的表达式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]$
请注意,我给出的第一个示例被拒绝(未解析),第二个示例被接受。