【发布时间】:2013-12-13 14:24:32
【问题描述】:
我正在开发一个命令解析器,它应该接受以 \r\n 结尾的命令行并提取其参数
命令行结构如下:
()里面的参数都是强制的,[]里面的参数是可选的,spc 代表空白或空格。 \t 代表制表符
AP 是 1...4 之间的十进制整数 RT,WL 是十进制无符号整数 = 是等号 % 是百分比符号 以下是可接受的命令结构
[spc] MYCMD [spc] (\t) [spc] (AP) [spc ] (:) (WL)(=)(RT)spcspc(\n)
作为示例,以下命令正确:(整个命令不区分大小写)
MYCMD \t 1 : 540 = 21% \r\n
MYCMD \t 2 : 712= 25 % \r\n
MYCMD\t 3 : 200 =17%\r\n
和...
以下命令不正确:
MYCMD \t 5: 540 = 21% \r\n ---> 5 不在 1..4 范围内
MYCMD \t 2 : 712 25% \r\n --->没有等号
MYCMD 3 200 =17\r\n --->没有 : 3 到 200 之间,没有百分比符号
MYCMD 3 100 =1 ,,.\n ----> 1 后面有多余的符号,\r 不存在
MYCMD 2: 130 =17.1\r\n ----> sscanf 解析器不得将 17.1 浮点数转换为整数 7
我已经实现了 sscanf 控制格式,但是解析不正确!
int n_parsed=sscanf(cmd_str,"%*sMYCMD[*^\t]%*s%[1234]:%u%*s%[=]%u\r\n",&int_ap,&uint_wl,&uint_rt);
但这不适用于正确的命令(n_parsed 永远不会得到 3)。
任何有关修复解析问题的提示或 cmets 将不胜感激 谢谢
【问题讨论】:
标签: regex parsing controls scanf