C正则表达式,regcomp

时间:2015-03-21 11:12:56

标签: c regex

我正在尝试使用正则表达式来检查String是否为整数。我认为模式应该是^\d$,如果参数不合适,我写了一个函数来打印错误:

 regex_t regex;
 void check_int(char *c)
 {
     check=regcomp(&regex,"^\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(&regex, c, (size_t) 0, NULL, 0); 
refree(&regex); 
if(status!=0)
{
    perror("..");
    exit(5);
}

2 个答案:

答案 0 :(得分:1)

regcomp用于编译正则表达式模式,而不是与输入字符串匹配。要匹配字符串,您需要使用regexec。在这种情况下,regcomp的返回值始终为零,因为模式似乎编译时没有错误。

请参阅this link每个不同功能和用法示例的概要。

答案 1 :(得分:1)

您的示例有几个问题:

  • regcomp只准备正则表达式(检查documentation" regcomp()函数将编译模式参数指向的字符串中包含的正则表达式..."
  • 根据documentation我假设您的正则表达式为"^[[:digit:]+]$"
  • 您的字符串被\n终止,因此结束锚点不匹配
  • 你必须评估result of regcomp以评估匹配("如果找到匹配,regexec()将返回0;否则,它将返回非零指示...."
  • 如果您也可以使用尾随空格,请另外使用[:space:]

    void check_int(char *c)
    {
      int check=regcomp(&regex,"^[[:digit:]+]$",0);
      int status = regexec(&regex, c, (size_t) 0, NULL, 0);
    
      if (status !=0)
      {
        ....
    

检查CodePad是否为full example