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

时间:2013-08-27 23:38:13

标签: c regex

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

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

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

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

2 个答案:

答案 0 :(得分:36)

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

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

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

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

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

答案 1 :(得分:3)

你需要

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

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