使用regex.h在c中匹配/提取模式

时间:2015-03-17 15:28:03

标签: c regex string

我需要帮助在C中使用regex.h从字符串中提取子字符串。 在这个例子中,我试图提取所有出现的字符' e'来自字符串'电话'。不幸的是,我不知道这些角色的偏移量。我列出了以下代码:

#include <stdio.h>
#include <regex.h>

int main(void) {
    const int size=10;
    regex_t regex;
    regmatch_t matchStruct[size];

    char pattern[] = "(e)";
    char str[] = "telephone";

    int failure = regcomp(&regex, pattern, REG_EXTENDED);
    if (failure) {
        printf("Cannot compile");
    }

    int matchFailure = regexec(&regex, pattern, size, matchStruct, 0);
    if (!matchFailure) {
        printf("\nMatch!!");
    } else {
        printf("NO Match!!");
    }

    return 0;
}

所以根据GNU的手册,我应该得到所有'&#39; e&#39;当一个字符括起来时。但是,我总是只有第一次出现。

基本上,我希望能够看到类似的内容:

matchStruct[1].rm_so = 1;
matchStruct[1].rm_so = 2;

matchStruct[2].rm_so = 4;
matchStruct[2].rm_so = 5;

matchStruct[3].rm_so = 7;
matchStruct[3].rm_so = 8;

或沿着这些方向的东西。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

请注意,您实际上并未将编译的正则表达式与str(&#34;电话&#34;)进行比较,而是将您的纯文本pattern进行比较。检查您的第二个属性regexec。修复后,例如进入&#34; regex in C language using functions regcomp and regexec toggles between first and second match&#34;已经给出了你问题的答案。