2014-02-16 45 views
1

我正在处理涉及正则表达式的项目。这是我(在C)的代码:C中的正则表达式无法正常工作

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

int main(int argc, const char * argv[]) 
{ 

    regex_t regex; 
    int reti; 
    char msgbuf[100]; 

    /* Compile regular expression */ 
    reti = regcomp(&regex, "[0-9]+", 0); 

    /* Execute regular expression */ 
    reti = regexec(&regex, "3", 0, NULL, 0); 
    if(!reti){ 
     puts("Match"); 
    } 
    else if(reti == REG_NOMATCH){ 
     puts("No match"); 
    } 
    else{ 
     regerror(reti, &regex, msgbuf, sizeof(msgbuf)); 
     fprintf(stderr, "Regex match failed: %s\n", msgbuf); 
     exit(1); 
    } 

    regfree(&regex); 

    return 0; 
} 

我试图用各种正则表达式使用,但主要是他们都没有工作。例如,正则表达式\d不起作用,所以我必须使用[0-9]。此外+正则表达式不工作,我需要它,因为我必须匹配一个或多个数字。

我使用的是Mac OS X,如果有人可以帮忙请做。提前致谢。

回答

3

+修改不会在BRE which is the default工作。将cflags设置为REG_EXTENDED

reti = regcomp(&regex, "[0-9]+", REG_EXTENDED); 

而且,你可以以匹配一个数字用字符类[:digit:]的。 \d未由POSIX定义,并且不起作用。

reti = regcomp(&regex, "[[:digit:]]+", REG_EXTENDED); 
相关问题