regexec() 无法匹配模式

regexec() fails to match pattern

我正在尝试使用以下正则表达式匹配 'sdb-iof-pool 1008.56M 884K' 之类的字符串:^(.*)([\s]+)([-+]?[0-9]*\.?[0-9]+)([K|M|G|T|P]{1})([\s]+)([-+]?[0-9]*\.?[0-9]+)([K|M|G|T|P]{1})(.*)$

我的c代码如下:

int reti;
regex_t regex;
size_t maxGroups = 8;
regmatch_t groupArray[maxGroups];
const char * pattern = "^(.*)([\s]+)([-+]?[0-9]*\.?[0-9]+)([K|M|G|T|P]{1})([\s]+)([-+]?[0-9]*\.?[0-9]+)([K|M|G|T|P]{1})(.*)$";
reti = regcomp(&regex, pattern, REG_EXTENDED);
if (reti) {
    regerror(reti, &regex, log_buffer, IOF_MAX_MSG);
    snprintf(error, IOF_MAX_MSG, "%s: Failed to compile regex '%s': (%d) '%s'", __FUNCTION__, pattern, reti, log_buffer);
    return FAIL;
}
reti = regexec(&regex, cmd_output, maxGroups, groupArray, 0);
if (reti == REG_NOMATCH) {
    regerror(reti, &regex, log_buffer, IOF_MAX_MSG);
    regfree(&regex);
    snprintf(error, IOF_MAX_MSG, "Failed to match regex '%s' on '%s': %s", pattern, cmd_output, log_buffer);
    return FAIL;
}
regfree(&regex);

尽管像 this 这样的工具似乎可以确认正则表达式工作正常,但我的程序 returns: "Failed to match regex '^(.)([\s]+)([-+]?[0-9].?[0-9]+)([K|M|G|T|P]{1})([\s]+)([-+]?[0-9].?[0-9]+)([K|M|G|T|P]{1})(.)$' on 'sdb-iof-pool 1008.56M 884K': No match"

在使用带有扩展正则表达式选项“-E”的实用程序 "grep" 进行多次试验和错误之后,通过阅读该实用程序的手册,我怀疑字符 class [\s 】 是罪魁祸首。字符 class [\s] 无法被 POSIX 语法识别。 [:space:] 必须改用。