我目前正在尝试解析文本文件并在其中查找任何十六进制数字。如果十六进制数不正确,我将其显示为非数字。
input:
-0xA98F
0XA98H
0x123
0xabc
expected output:
-0xA98F valid
0x123 valid
0xabc not valid
0xA98H not valid
我的问题是,如果我得到类似0xA98H的东西,它将输出为0xA98并显示为数字。我的目标是让我的输出像我的例子,但我没有看到任何解决我的问题。
[-]?[0][x|X][0-9A-F]+ {cout << yytext << " Number" << endl; }
答案 0 :(得分:2)
以下示例代码根据OP的要求接受十六进制数字:
$ flex -otest-hex.cc test-hex.l ; g++ -o test-hex test-hex.cc
$ echo '-0xA98F
> 0XA98H
> 0x123
> 0xabc
>' | ./test-hex
-0xA98F valid
0XA98H not valid
0x123 valid
0xabc not valid
$
使用flex和g ++编译并在cygwin上测试:
(\n|\r|\r\n)
忽略空格和空行。
redirect_to
表示一种模式,可以匹配类似Unix的行结尾,类似MacOS的行结尾,以及类似DOS / Windows的行结尾(按此顺序)。