我正在使用正则表达式来确定命令行参数的扩展名为.dat。我正在尝试以下正则表达式:
#define to_find "^.*\.(dat)?"
出于某种原因,我收到了我在这个问题标题中所说的警告。首先,这个表达是否正确?我相信它是。第二,如果它是正确的,我怎么能摆脱这个警告?
我在Xcode编写一个c程序,上面的#define在我的.h文件中。 谢谢!
答案 0 :(得分:36)
警告来自C编译器。它告诉你\.
不是C中已知的转义序列。由于这个字符串是一个正则表达式引擎,你需要双斜线斜杠,如下所示:
#define to_find "^.*\\.(dat)?"
此正则表达式将匹配带有可选.dat
扩展名的字符串,其中dat
是可选的。但是,点.
是必需的。如果您希望点也是可选的,请将其放在括号内,如下所示:^.*(\\.dat)?
。
请注意,您可以通过将它们括在方括号中来避免转义单个元字符,如下所示:
#define to_find "^.*([.]dat)?"
答案 1 :(得分:3)
你需要
#define to_find "^.*\\.(dat)?"
应该这样做,因为\需要为C转义\而不是现阶段正则表达式的好处