scanf() 空白字符列表
scanf() whitespace chars list
我正在尝试扫描和解析这样的字符串:
var = val1/val2:mod1-mod2
var = val1/val2:mod1
var = val1/val2
var = val1
var
使用这个 sscanf() 表达式:
vars = sscanf(instr, " %[^=\n\t ] = %[^/\n\t ] / %[^:\n\t ] : %[^-\n\t ] - %s", var, v1, v2, m1, m2);
我的菜鸟问题是:
- 是否可以在这里为白色space字符指定一个class,即[:space:],而不是全部指定它们?
- 对正则表达式有任何可能的优化吗?
你可以这样做:
#define WHITESPACE " \r\n\t\f\v"
然后像这样使用字符串文字连接:
vars = sscanf(
instr,
" %[^="WHITESPACE"] = %[^/"WHITESPACE"] / %[^:"WHITESPACE"] : %[^-"WHITESPACE"] - %s",
var, v1, v2, m1, m2
);
它看起来有点难看,但它确实有效。至于你的格式字符串本身,它看起来很好。由于您似乎并不总能找到所有 5 个标识符,因此检查 sscanf
的 return 值将帮助您了解进行了多少次匹配,而且您似乎已经在这样做了。
我正在尝试扫描和解析这样的字符串:
var = val1/val2:mod1-mod2
var = val1/val2:mod1
var = val1/val2
var = val1
var
使用这个 sscanf() 表达式:
vars = sscanf(instr, " %[^=\n\t ] = %[^/\n\t ] / %[^:\n\t ] : %[^-\n\t ] - %s", var, v1, v2, m1, m2);
我的菜鸟问题是:
- 是否可以在这里为白色space字符指定一个class,即[:space:],而不是全部指定它们?
- 对正则表达式有任何可能的优化吗?
你可以这样做:
#define WHITESPACE " \r\n\t\f\v"
然后像这样使用字符串文字连接:
vars = sscanf(
instr,
" %[^="WHITESPACE"] = %[^/"WHITESPACE"] / %[^:"WHITESPACE"] : %[^-"WHITESPACE"] - %s",
var, v1, v2, m1, m2
);
它看起来有点难看,但它确实有效。至于你的格式字符串本身,它看起来很好。由于您似乎并不总能找到所有 5 个标识符,因此检查 sscanf
的 return 值将帮助您了解进行了多少次匹配,而且您似乎已经在这样做了。