delibk 2016-04-25 08:40 采纳率: 100%
浏览 1835

C语言 PCRE正则表达式 函数解析

求指教:PCRE库函数中,pcre_exec()的返回值是什么意思? *ovector数组的元素又是代表什么意

  • 写回答

2条回答

  • 小灸舞 2016-04-25 08:49
    关注

    int pcre_exec(const pcre *code, const pcre_extra *extra, const char *subject, int length, int startoffset, int options, int *ovector, int ovecsize)
    pcre_exec()返回匹配串的偏移位置

     #include <string.h>
    #include <stdio.h>
    #include <pcre.h>
    
    int main()
    {
        pcre *re;
    
        const char *error;
        int errorOffset, i = 0;
        /**
         * pcre_exec匹配的结果
         * ovector的结构为
         * {匹配结果1的起始位置,匹配结果1的结束位置,匹配结果2的起始位置,...匹配结果N的结束位置}
         */
        int oveccount = 2, ovector[oveccount];
    
        /**
         * rc是pcre_exec匹配到的结果数量
         */
        int rc;
        /**
         * pcre_exec执行的偏移量
         * 从匹配到的结果的结束位置开始下一次匹配
         */
        int exec_offset = 0;
    
    
        const char *captured_string;
        char *subject = "1t2t3t4t5t6t7t8t9t0tatbtct黄t避孕t";
        char *pattern = "[^t]+t";
    
        re = pcre_compile( pattern, PCRE_CASELESS, &error, &errorOffset, NULL );
    
        if ( re == NULL ) {
            printf("compilation failed at offset%d: %s\n", errorOffset, error);
            return 0;
        }
    
        do {
            // exec_offset偏移量 默认从1开始,然后循环的时候从匹配到的结果开始
            rc = pcre_exec( re, NULL, subject, strlen(subject), exec_offset, 0, ovector, oveccount );
    
            if ( rc > 0 ) {
                // 获取到匹配的结果
                pcre_get_substring( subject, ovector, rc, 0, &captured_string );
                printf("captured string : %s\n", captured_string);
    
                // 设置偏移量
                exec_offset = ovector[1];
                i++;
            }
        } while ( rc > 0 );
    
        printf("match %d\n", i);
    
        return 0;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退