Q:

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

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! 

A:

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)?" 

A:

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

Should do the trick as the \ needs to be escaped for C and not the benefit for regex at this stage

