zoukankan      html  css  js  c++  java
  • regcomp/regexec/regfree--POSIX regex functions

    语法

           #include <sys/types.h>
           #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);

    解析

    正则表达式库函数主要分两部分,正则表达式编译和匹配。编译用于正则表达式提供格式(程序识别),匹配用于提供匹配位置便于提取。

    regcomp()  is  used to compile a regular expression into a form that is suitable for subsequent regexec() searches.
    regexec() is used to match a null-terminated string against the precompiled  pattern  buffer,  preg.   nmatch  and pmatch are used to provide information regarding the location of any matches.  eflags may  be  the bitwise-or  of  one  or  both  of REG_NOTBOL and REG_NOTEOL which cause changes in matching behavior described below.

    示例

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <regex.h>
    
    #define MATCH_NUM 3
    
    char str[]={"Chinese love China! China, fighting!
    "};
    
    int main(int argc, char **argv)
    {
        regex_t reg;
        int ret = 0, i = 0;
        regmatch_t matches[MATCH_NUM];
        char *ps = NULL;
    
        ret = regcomp(&reg, "Chin.", REG_NEWLINE | REG_EXTENDED);
        if(ret != 0){ 
            perror("regcomp");
            exit(1);
        }   
        
        ret = regexec(&reg, str, MATCH_NUM, matches, 0); 
        if(ret != 0){ 
            perror("regexec");
            exit(1);
        }   
        for(i = 0; i < MATCH_NUM; i++){
            ps = strndup(str + matches[i].rm_so, matches[i].rm_eo - matches[i].rm_so);
            if(ps)
                printf("The match %dst is [%s]:[%d:%d]
    ", i, ps, matches[i].rm_so, matches[i].rm_eo);
            free(ps);
        }
    
        regfree(&reg);
    
        return 0;
    }
    ~$gcc regex.c -Wall
    ~$./a.out 
    The match 0st is [Chine]:[0:5]
    The match 1st is []:[-1:-1]
    The match 2st is []:[-1:-1]

    明显不是想要的结果,需继续测试。

  • 相关阅读:
    [算法分析]计数排序
    [置顶] 基于stm32f103zet6之UC/OS_II的学习1(初步移植OS点灯大法)
    IOS开发(59)之Block Object的调用
    【译】测试员,敢问路在何方?来自微软工程师
    各种字符串hash
    hdu 2579 BFS
    qq相册
    程序人生之我们的故事:十年如歌(9)
    关联模型和无限极分类
    十大技巧破解电话面试
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/6986631.html
Copyright © 2011-2022 走看看