POSIX регулярное выражение в C не работает - PullRequest
0 голосов
/ 24 сентября 2011

Я хочу сопоставить каждую вещь между двумя словами GET и HTTP. Я перепробовал все, что знаю. Но это не работает. Любая помощь приветствуется. Шаблон GET. * HTTP должен соответствовать GET. Www.google.com HTTP.

Вот код

Заголовки:

#include <sys/types.h>
#include <regex.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

Main:

int main(int argc, char *argv[]) {
    regex_t regex;
    int reti;
    char msgbuf[100];
    regmatch_t pmatch[1];

    /* Compile regular expression */
    reti = regcomp(&regex, "GET.*HTTP", REG_EXTENDED);
    if (reti) {
        fprintf(stderr, "Could not compile regex\n");
        exit(1);
    }

    /* Execute regular expression */
    reti = regexec(&regex, argv[1], 1, pmatch, 0);

    if (!reti) {
        puts("Match");
        char *match = strndup(argv[1] + pmatch[0].rm_so, pmatch[0].rm_eo - pmatch[0].rm_so);

        printf("%s\n",match);
    } else if (reti == REG_NOMATCH) {
        puts("No match");
    } else {
        regerror(reti, &regex, msgbuf, sizeof(msgbuf));
        fprintf(stderr, "Regex match failed: %s\n", msgbuf);
        exit(1);
    }

    /* Free compiled regular expression if you want to use the regex_t again */
    regfree(&regex);

    return 0;
}

Есть ли что-то, что я делаю здесь не так.

1 Ответ

4 голосов
/ 25 сентября 2011

Похоже, мой комментарий был ответом ...

Проблема в том, что аргумент командной строки был разбит на 3 строки, поэтому argv[1] указывает только на GET.

Чтобы передать всю строку в программу, вы должны использовать двойные кавычки:

$ ./regex GET www.google.com HTTP
No match
$ ./regex "GET www.google.com HTTP"
Match
GET www.google.com HTTP
$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...