C compiler warning Unknown escape sequence '\.' using regex for c program

c, regex

Solution

The warning is coming from the C compiler. It is telling you that `\.` is not a known escape sequence in C. Since this string is going to a regex engine, you need to double-escape the slash, like this:

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

This regex would match a string with an optional `.dat` extension, with `dat` being optional. However, the dot `.` is required. If you want the dot to be optional as well, put it inside the parentheses, like this: `^.*(\\.dat)?`.

Note that you can avoid escaping the individual metacharacters by enclosing them in square brackets, like this:

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

Problem

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!

Original source