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);

我的菜鸟问题是:

  1. 是否可以在这里为白色space字符指定一个class,即[:space:],而不是全部指定它们?
  2. 对正则表达式有任何可能的优化吗?

你可以这样做:

#define WHITESPACE " \r\n\t\f\v"

然后像这样使用字符串文字连接:

vars = sscanf(
    instr,
    " %[^="WHITESPACE"] = %[^/"WHITESPACE"] / %[^:"WHITESPACE"] : %[^-"WHITESPACE"] - %s",
    var, v1, v2, m1, m2
);

它看起来有点难看,但它确实有效。至于你的格式字符串本身,它看起来很好。由于您似乎并不总能找到所有 5 个标识符,因此检查 sscanf 的 return 值将帮助您了解进行了多少次匹配,而且您似乎已经在这样做了。