2 peinishangrichu peinishangrichu 于 2016.04.25 16:40 提问

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

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

2个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.25 16: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;
}
peinishangrichu
peinishangrichu ovector={5,16,5,16,-1....};
一年多之前 回复
peinishangrichu
peinishangrichu code=pcre_compile(pattern,0,&error,&erroffset,NULL); rc=pcre_exec(code,NULL,subject,strlen(subject),0,0,ovector,N);
一年多之前 回复
CSDNXIAOS
CSDNXIAOS   2016.04.25 16:52

#define PCRE_STATIC // 静态库编译选项

#include <stdio.h>

#include <string.h>

#include <pcre.h>

#define OVECCOUNT 30 /* should be a multiple of 3 */

#define EBUFLEN 128......
答案就在这里:PCRE-C语言正则表达式
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

peinishangrichu
peinishangrichu for (i = 0; i < rc; i++) { //分别取出捕获分组 $0整个正则公式 $1第一个() char *substring_start = src + ovector[2*i]; int substring_length = ovector[2*i+1] - ovector[2*i]; printf("$%2d: %.*s\n", i, substring_length, substring_start);
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片