Avertissement du compilateur C Séquence d’échappement inconnue ‘\.’ en utilisant regex pour le programme c

J’utilise regex pour déterminer un argument de ligne de commande ayant l’extension .dat. J’essaye la regex suivante:

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

Pour une raison quelconque, je reçois l’avertissement que j’ai déclaré dans le titre de cette question. Tout d’abord, cette expression est-elle correcte? Je crois que c’est. Deuxièmement, s’il est correct, comment puis-je me débarrasser de cet avertissement?

Je suis en train de coder un programme dans Xcode et le #define ci-dessus est dans mon fichier .h. Merci!

L’avertissement provient du compilateur C. Il vous dit que \. n’est pas une séquence d’échappement connue en C. Cette chaîne étant dirigée vers un moteur regex, vous devez double échapper à la barre oblique, comme ceci:

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

Cette expression rationnelle correspondrait à une chaîne avec une extension facultative .dat , la date étant facultative. Cependant, le point . est requirejs. Si vous souhaitez également que le point soit facultatif, mettez-le entre parenthèses, comme suit: ^.*(\\.dat)? .

Notez que vous pouvez éviter d’échapper aux métacaractères individuels en les plaçant entre crochets, comme ceci:

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

Vous avez besoin

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

Devrait faire l’affaire car le \ doit être échappé pour C et non pas l’avantage pour regex à ce stade