19

I am using regex to determine a command line argument has the .dat extension. I am trying the following regex:

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

For some reason I am getting the warning I stated in the title of this question. First, is this expression correct? I believe it is. Second, if it is correct, how can i get rid of this warning?

I am coding a c program in Xcode and the above #define is in my .h file. Thanks!

4

2 回答 2

36

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

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

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

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

#define to_find "^.*([.]dat)?"
于 2013-08-27T23:41:12.890 回答
3

你需要

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

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

于 2013-08-27T23:50:35.057 回答