我正在尝试使用正则表达式来检查String是否为整数。我认为模式应该是^\d$
,如果参数不合适,我写了一个函数来打印错误:
regex_t regex;
void check_int(char *c)
{
check=regcomp(®ex,"^\d$",0);
if (check!=0)
{
perror("4th element on the line is not an integer!");
exit(5);
}
else printf("4th arg is a number.");
}
我不确定regcomp
是如何工作的,我在查看互联网上的一些例子之后就按照我的想法使用了它。
问题是它总是说我的字符串是一个数字,无法弄清楚为什么......
添加了这个,现在总是不返回匹配:
status = regexec(®ex, c, (size_t) 0, NULL, 0);
refree(®ex);
if(status!=0)
{
perror("..");
exit(5);
}
答案 0 :(得分:1)
regcomp
用于编译正则表达式模式,而不是与输入字符串匹配。要匹配字符串,您需要使用regexec
。在这种情况下,regcomp
的返回值始终为零,因为模式似乎编译时没有错误。
请参阅this link每个不同功能和用法示例的概要。
答案 1 :(得分:1)
您的示例有几个问题:
regcomp
只准备正则表达式(检查documentation:" regcomp()
函数将编译模式参数指向的字符串中包含的正则表达式..." )"^[[:digit:]+]$"
\n
终止,因此结束锚点不匹配regcomp
以评估匹配("如果找到匹配,regexec()
将返回0;否则,它将返回非零指示...." )如果您也可以使用尾随空格,请另外使用[:space:]
void check_int(char *c)
{
int check=regcomp(®ex,"^[[:digit:]+]$",0);
int status = regexec(®ex, c, (size_t) 0, NULL, 0);
if (status !=0)
{
....
检查CodePad是否为full example。