C 编译器警告 对 c 程序使用正则表达式'.'未知转义序列



我使用regex来确定命令行参数的扩展名为.dat。我正在尝试以下正则表达式:

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

出于某种原因,我收到了我在这个问题的标题中所说的警告。首先,这个表达正确吗?我相信是的。第二,如果它是正确的,我该如何摆脱这个警告?

我正在用Xcode编写一个c程序,上面的#define在我的.h文件中。谢谢

警告来自C编译器。它告诉你.在C中不是一个已知的转义序列。由于这个字符串将进入正则表达式引擎,你需要对斜杠进行双转义,如下所示:

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

此正则表达式将匹配具有可选.dat扩展名的字符串,其中dat是可选的。然而,点.是必需的。如果您希望点也是可选的,请将其放在括号内,如下所示:^.*(\.dat)?

请注意,您可以通过将各个元字符括在方括号中来避免转义,如下所示:

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

您需要

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

应该这样做,因为在这个阶段,\需要为C转义,而不是为regex转义。

最新更新