linux下,调用正则表达式函数库函数

系统:Ubuntu14.04

包含头文件:#include <regex.h>

具体函数:

int regcomp(regex_t *preg, const char *regex, int cflags);
int regexec(const regex_t *preg, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags);
size_t regerror(int errcode, const regex_t *preg, char *errbuf, size_t errbuf_size);
void regfree(regex_t *preg);

下面是一个例子:

/*
 *pattern给出需要查询的正则式,fiename需要查找的文件,在函数中打开后,按行查找
 *pool是一个存放查找到字符串的结构体,此处未给出定义
 **/
void reg(char *pattern, char* fileName, struct threadpool* pool)
{
    char buf[BUFSIZE];
    char *f;
    regex_t reg;
    regmatch_t pmatch[5];
    FILE* in;
    int ret, num = 0;
    
    if (regcomp(&reg, pattern, REG_EXTENDED) < 0)
    {
        printf("err\n");
        return;
    }
    
    if (!(in = fopen(fileName, "rb")))
    {
        printf("open error:%s\n", fileName);
        return;
    }
    
    while (fgets(buf, BUFSIZE, in))
    {
        //buf[strlen(buf)] = '\0';
        f = buf;
        while (f)
        {
            ret = regexec(&reg, f, 1, pmatch, 0);
    
            if (ret == REG_NOMATCH)
            {
                //printf("No match\n");
                break;
            }
            else if (ret)
            {
                char err[100];
                regerror(ret, &reg, err, 100);
                printf("error:%s\n", err);
                break;
            }
        
            int len = pmatch[0].rm_eo - pmatch[0].rm_so;
            char buff[BUFSIZE];
            char *c;
            memset(buff, 0, BUFSIZE);
            //-1 cut the "
            strncpy(buff, f + pmatch[0].rm_so, len - 1);
            c = strstr(buff, "//");
            pthreadaddfilename(pool, c + 2);
            ++num;
            f += pmatch[0].rm_eo + 1;
        }
    }
    regfree(&reg);
}


你可能感兴趣的:(linux下,调用正则表达式函数库函数)