我正在尝试从解析的文本文件中识别十六进制数字,并且所有内容都准确率达到99%但是我仍然遇到此特定实例0xa98h的问题。每当它找到这一行时,它将输出0xa98而不是完全忽略它,因为它无效。我已经尝试了很多此代码的变体,并且尚未找到排除该问题的方法。
[-]?[0][x|X][0-9A-F]+ {cout << yytext << " Number" << endl; }
答案 0 :(得分:0)
十六进制数字的模式不考虑数字'a'...'f'。试试这个:
[-]?[0][xX][0-9a-fA-F]+ {cout << yytext << " Number" << endl; }
进一步观察:
[x|X]
中的竖线可能错误。否则,这也可以:0|a98h
。另一种方法可能是这个(test-hex.l
):
%{
#include <iostream>
using namespace std;
%}
%option caseless
%%
[-]?[0][x][0-9a-f]+ {cout << yytext << " Number" << endl; }
%%
int main(int argc, char **argv) { return yylex(); }
int yywrap() { return 1; }
在cygwin上使用flex和gcc进行编译和测试:
$ flex -V
flex 2.6.3
$ flex -otest-hex.cc test-hex.l ; g++ -o test-hex test-hex.cc
$ echo '0xa98h' | ./test-hex
0xa98 Number
h
没有匹配h
的模式。这是打印的,因为lex / flex生成一个默认规则来回显与标准输出不匹配的所有内容。