Я пытаюсь реализовать регулярное выражение в C, у меня есть следующий код, чтобы найти всю строку, которая содержит в ней "*",
regex_t regex;
regcomp(®ex, "^[A-Za-z0-9\*]+$", 0);
if (!regexec(®ex, args[j], 0, NULL, 0)) {
printf("string found");
}
Правильно ли это? Мой код не соответствует строкам, содержащим "*". Любая помощь в этом будет принята с благодарностью.
В C++ символ \
должен быть экранирован. Поэтому, если вы хотите избежать регулярного выражения *
, вам нужно сделать \\*
. Это должно решить проблему. Всякий раз, когда вы используете обратную косую черту в строке, вам нужно ее избежать. Если вам когда-либо понадобится найти его в строке с регулярным выражением, вам нужно будет искать его с помощью \\\\
.
В дополнение к ответу Pawel, в С++ 11 вы можете упростить это, используя строковый литерал строки:
regcomp(®ex, R"(^[A-Za-z0-9\*]+$)", 0);
(если вы хотите использовать символы ()
в регулярном выражении, вам нужно будет выбрать другой разделитель, конечно).
regcomp
и как выглядитargs[j]
? Какой типargs
?