C编译器警告未知的转义序列’\。’ 使用正则表达式进行c程序

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

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

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

我在Xcode中编写ac程序,上面的#define在我的.h文件中。 谢谢!

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

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

此正则表达式将匹配带有可选.dat扩展名的字符串,其中dat是可选的。 但是,点. 是必须的。 如果你想要点也是可选的,把它放在括号内,如下所示: ^.*(\\.dat)?

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

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

你需要

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

应该这样做,因为\需要为C转义,而不是在此阶段正则表达式的好处