我正在检查字符串是否是有效数字。有效数字是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)可能已经足够了(它给出了数字和结束指针,因此请检查结束指针是否指向终止的空字节)。