Предупреждение компилятора C Неизвестная escape-последовательность '\.' использование регулярного выражения для программы c
Я использую regex для определения аргумента командной строки с расширением .dat. Я пытаюсь использовать следующее регулярное выражение:
#define to_find "^.*\.(dat)?"
По какой-то причине я получаю предупреждение, указанное в заголовке этого вопроса. Во-первых, правильно ли это выражение? Я считаю, что это так. Во-вторых, если это правильно, как я могу избавиться от этого предупреждения?
Я кодирую программу c в Xcode и выше #define находится в моем .h файле.
Спасибо!
Ответы
Ответ 1
Предупреждение исходит от компилятора C. Он говорит вам, что \.
не является известной escape-последовательностью в C. Поскольку эта строка подходит к движку регулярных выражений, вам нужно дважды избежать косой черты, например:
#define to_find "^.*\\.(dat)?"
Это регулярное выражение будет соответствовать строке с дополнительным расширением .dat
, причем dat
является необязательным. Однако требуется точка .
. Если вы хотите, чтобы точка была необязательной, поместите ее в круглые скобки, например: ^.*(\\.dat)?
.
Обратите внимание, что вы можете избежать экранирования отдельных метасимволов, заключая их в квадратные скобки, например:
#define to_find "^.*([.]dat)?"
Ответ 2
Вам нужно
#define to_find "^.*\\.(dat)?"
Должен сделать трюк, так как\должен быть экранирован для C, а не для регулярного выражения на этом этапе