Подтвердить что ты не робот

Предупреждение компилятора C Неизвестная escape-последовательность '\.' использование регулярного выражения для программы c

Я использую regex для определения аргумента командной строки с расширением .dat. Я пытаюсь использовать следующее регулярное выражение:

#define to_find "^.*\.(dat)?"

По какой-то причине я получаю предупреждение, указанное в заголовке этого вопроса. Во-первых, правильно ли это выражение? Я считаю, что это так. Во-вторых, если это правильно, как я могу избавиться от этого предупреждения?

Я кодирую программу c в Xcode и выше #define находится в моем .h файле. Спасибо!

4b9b3361

Ответ 1

Предупреждение исходит от компилятора C. Он говорит вам, что \. не является известной escape-последовательностью в C. Поскольку эта строка подходит к движку регулярных выражений, вам нужно дважды избежать косой черты, например:

#define to_find "^.*\\.(dat)?"

Это регулярное выражение будет соответствовать строке с дополнительным расширением .dat, причем dat является необязательным. Однако требуется точка .. Если вы хотите, чтобы точка была необязательной, поместите ее в круглые скобки, например: ^.*(\\.dat)?.

Обратите внимание, что вы можете избежать экранирования отдельных метасимволов, заключая их в квадратные скобки, например:

#define to_find "^.*([.]dat)?"

Ответ 2

Вам нужно

#define to_find "^.*\\.(dat)?"

Должен сделать трюк, так как\должен быть экранирован для C, а не для регулярного выражения на этом этапе