избавиться от предупреждения компилятора регулярных выражений без использования #include ‹regex.h›

Я использую регулярное выражение в vxworks и не могу включить "regex.h".

Я получаю предупреждение компилятора о «нераспознанной escape-последовательности символов» для кода if (sscanf(token, "%*[^\[][%d]", &idx) != 1) из-за «\» и следующего за ним «[».

Есть ли возможность избавиться от этого предупреждения компилятора без использования regex.h и прочего, как это делается здесь: Невозможно сопоставить регулярное выражение в C


person Albrecht    schedule 19.02.2019    source источник
comment
scanf не использует регулярные выражения. Один спецификатор формата напоминает регулярное выражение, но это не так. См., например. эту справку по scanf (и семейству) для получения дополнительной информации о спецификаторе формата "%[".   -  person Some programmer dude    schedule 19.02.2019
comment
Формат scanf() не является регулярным выражением.   -  person pmg    schedule 19.02.2019
comment
... и даже если бы это было регулярным выражением, чтобы включить литеральную обратную косую черту в строковый литерал, вам все равно нужно было бы экранировать ее, удвоив ее. Ваша неспособность сделать это - это то, на что жалуется компилятор.   -  person John Bollinger    schedule 19.02.2019
comment
хорошо, спасибо за указание на актуальную проблему   -  person Albrecht    schedule 19.02.2019


Ответы (1)


Вы можете попробовать что-то вроде

#include <stdio.h>

int main(void) {
    char buf[99];
    int idx, n;
    while (fgets(buf, sizeof buf, stdin)) {
        buf[strcspn(buf, "\n")] = 0; // remove ENTER
        if (sscanf(buf, "%*[^[][%d%n", &idx, &n) != 1) {
            printf("no number in %s\n", buf);
        } else {
            printf("number found: %d (left over string: \"%s\")\n", idx, buf + n);
        }
    }
    return 0;
}

Просмотреть код, работающий на ideone

person pmg    schedule 19.02.2019