синтаксический анализ / сопоставление вхождения строки в C - PullRequest
1 голос
/ 10 апреля 2010

У меня есть следующая строка:

const char *str = "\"This is just some random text\" 130 28194 \"Some other string\" \"String 3\""

Я хотел бы получить целое число 28194 Конечно, целое число меняется, поэтому я не могу сделать strstr("20194").

Так что мне было интересно, что было бы хорошим способом получить эту часть строки?

Я думал использовать #include <regex.h>, у меня уже есть процедура для сопоставления с регулярным выражением, но не уверен, как регулярное выражение в C будет выглядеть с использованием нотации в стиле POSIX. [:alpha:]+[:digit:] и если производительность будет проблемой. Или лучше будет strchr,strstr?

Любые идеи оценят

1 Ответ

0 голосов
/ 10 апреля 2010

Если вы хотите использовать регулярные выражения, вы можете использовать:

const char *str = "\"This is just some random text\" 130 28194 \"Some other string\" \"String 3\"";
regex_t re;
regmatch_t matches[2];
int comp_ret = regcomp(&re, "([[:digit:]]+) \"", REG_EXTENDED);
if(comp_ret)
{
    // Error occured.  See regex.h
}
if(!regexec(&re, str, 2, matches, 0))
{
    long long result = strtoll(str + matches[1].rm_so, NULL, 10);
    printf("%lld\n", result);
}
else
{
    // Didn't match
}
regfree(&re);

Вы правы, что есть другие подходы.

РЕДАКТИРОВАТЬ: Изменено для использования необязательного повторения и показать больше проверки ошибок.

...