Как я могу сопоставить '*' в регулярном выражении

0

Я пытаюсь реализовать регулярное выражение в C, у меня есть следующий код, чтобы найти всю строку, которая содержит в ней "*",

regex_t regex;
regcomp(&regex, "^[A-Za-z0-9\*]+$", 0);

if (!regexec(&regex, args[j], 0, NULL, 0)) {
    printf("string found");
}

Правильно ли это? Мой код не соответствует строкам, содержащим "*". Любая помощь в этом будет принята с благодарностью.

Теги:
operating-system

2 ответа

4
Лучший ответ

В C++ символ \ должен быть экранирован. Поэтому, если вы хотите избежать регулярного выражения *, вам нужно сделать \\*. Это должно решить проблему. Всякий раз, когда вы используете обратную косую черту в строке, вам нужно ее избежать. Если вам когда-либо понадобится найти его в строке с регулярным выражением, вам нужно будет искать его с помощью \\\\.

  • 0
    все еще код не работает, мне просто нужно проверить, содержит ли строка '*'.
  • 0
    Код кажется в порядке. Что возвращает regcomp и как выглядит args[j] ? Какой тип args ?
Показать ещё 3 комментария
1

В дополнение к ответу Pawel, в С++ 11 вы можете упростить это, используя строковый литерал строки:

regcomp(&regex, R"(^[A-Za-z0-9\*]+$)", 0);

(если вы хотите использовать символы () в регулярном выражении, вам нужно будет выбрать другой разделитель, конечно).

  • 0
    дерьмо ... 1 мин до поздна :) +1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню