rorono
10/26/2015 - 11:44 AM

c言語で正規表現で検索を行う

c言語で正規表現で検索を行う

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

void put_n_char(const char *s, regoff_t so, regoff_t eo)
{
    const char * const ep = s + eo;

    for(s += so; s != ep; s++) putchar(*s);
}

int main(void)
{
    regex_t reg;
    const char *pattern = "h(ttp:(//))([[:alnum:]./]+)";

    regmatch_t match[5];
    int match_elems = sizeof match / sizeof match[0];

    char *s[] = {
        "http://www.example.com",
        "123http://www.google.com/",
    };
    int s_elems = sizeof s / sizeof s[0];

    int i, j;

    regcomp(&reg, pattern, REG_EXTENDED);

    for(i = 0; i < s_elems; i++) {
        if(regexec(&reg, s[i], match_elems, match, 0) != REG_NOMATCH) {

            for(j = 0; j < match_elems; j++) {
                // 注: 実装によっては regoff_t は単純な int でない可能性がある
                printf("%2lld, %2lld: ", match[j].rm_so, match[j].rm_eo);
                if(match[j].rm_so >= 0)
                    put_n_char(s[i], match[j].rm_so, match[j].rm_eo);
                puts("");
            }
        }
        puts("");
    }

    regfree(&reg);

    return 0;
}