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

c_s*_*arp 19 c regex

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

#define to_find "^.*\.(dat)?"
Run Code Online (Sandbox Code Playgroud)

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

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

das*_*ght 36

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

#define to_find "^.*\\.(dat)?"
Run Code Online (Sandbox Code Playgroud)

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

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

#define to_find "^.*([.]dat)?"
Run Code Online (Sandbox Code Playgroud)