我正在检查字符串是否是有效数字。有效数字是123或123.456。我试着与[0-9]+(\\.[0-9]+)?匹配,但那不起作用。
这是我目前所拥有的。

#include <stdio.h>
#include <regex.h>

int main()
{
    const char* string = "123";
    regex_t preg;

    regcomp(&preg, "[0-9]+(\\.[0-9]+)?", 0);

    if(regexec(&preg, string, (size_t)0, NULL, 0) == 0){
        printf("valid number\n");
    }
    else{
        printf("not valid number\n");
    }

    regfree(&preg);

    return 0;
}

当我运行这个时,它返回“无效数字”。
这是一个更大程序的一部分,我刚刚提取了regex部分来简化我的问题。

最佳答案

阅读手册页。您需要REG_EXTENDED标志,因为您在regexp中使用?

int errcode = regcomp(&preg, "[0-9]+(\\.[0-9]+)?", REG_EXTENDED);
if (errcode) {
   char errmsg[80];
   memset (errmsg, 0, sizeof(errmsg));
   regerror(errcode, &preg, errmsg, sizeof(errmsg));
   fprintf(stderr, "regexp failure: %s\n", errmsg);
   exit(EXIT_FAILURE);
}

但是对于您的特定测试regcomp(3)可能已经足够了(它给出了数字和结束指针,因此请检查结束指针是否指向终止的空字节)。

07-24 17:02