相关疑难解决方法(0)

C正则表达式:提取实际匹配

我在C中使用正则表达式(使用"regex.h"库).在为regcomp(...)和regexec(...)设置标准调用(和检查)之后,我只能设法打印与我编译的正则表达式匹配的实际子字符串.根据手册页,使用regexec意味着将子串匹配存储在称为"regmatch_t"的结构中.结构只包含rm_so和rm_eo来引用我所理解的内存中匹配子字符串的字符地址,但我的问题是我如何才能将这些用于偏移和两个指针来提取实际的子字符串并将其存储到一个数组(理想情况下是一个2D字符串数组)?

它只在您打印到标准输出时有效,但每当您尝试使用相同的设置但将其存储在字符串/字符数组中时,它会存储最初用于匹配表达式的整个字符串.此外,打印声明中的"%.*s"是什么?我想这是一个正则表达式,可以正确地读取指向字符数组的指针.我只想将匹配的子串存储在一个集合中,这样我就可以在我的软件中的其他地方使用它们了.

背景:p和p2都指向设置为指向字符串开头的指针,然后在下面的代码中输入while循环:[编辑:"匹配"是一个2D数组,意味着最终存储子字符串匹配并被预先分配/初始化在主循环之前,你看到下面]

int ind = 0;
while(1){
    regExErr1 = regexec(&r, p, 10, m, 0);
    //printf("Did match regular expr, value %i\n", regExErr1);
    if( regExErr1 != 0 ){ 
        fprintf(stderr, "No more matches with the inherent regular expression!\n"); 
        break; 
    }   
    printf("What was found was: ");
    int i = 0;
    while(1){
        if(m[i].rm_so == -1){
            break;
        }
        int start = m[i].rm_so + (p - p2);
        int finish = m[i].rm_eo + (p - p2);
        strcpy(matches[ind], ("%.*s\n", (finish - start), p2 + start));
        printf("Storing:  %.*s", matches[ind]); …
Run Code Online (Sandbox Code Playgroud)

c regex char pattern-matching

4
推荐指数
1
解决办法
9311
查看次数

标签 统计

c ×1

char ×1

pattern-matching ×1

regex ×1