2013-08-27 10 views
19

Sto usando regex per determinare che un argomento della riga di comando ha l'estensione .dat. Sto cercando la seguente espressione regolare:Avviso del compilatore C Sequenza di escape sconosciuta '.' usando regex per il programma c

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

Per qualche motivo sto ottenendo l'avvertimento ho detto nel titolo di questa interrogazione. Innanzitutto, questa espressione è corretta? Credo che sia. Secondo, se è corretto, come posso sbarazzarmi di questo avvertimento?

Sto codificando un programma c in Xcode e il precedente #define è nel mio file .h. Grazie!

risposta

33

L'avviso proviene dal compilatore C. E vi sta dicendo che \. non è una nota sequenza di escape in C. Dal momento che questa stringa è andare a un motore di regex, è necessario fare doppio-sfuggire alla barra, in questo modo:

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

Questa regex dovrebbe corrispondere una stringa con estensione opzionale .dat, con dat facoltativo. Tuttavia, è necessario il punto .. Se vuoi che il punto sia opzionale, mettilo tra parentesi, come questo: ^.*(\\.dat)?.

Nota che si può evitare la fuga dei singoli metacaratteri racchiudendoli tra parentesi quadre, come questo:

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

È necessario

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

dovrebbe fare il trucco come il \ deve essere sfuggito per C e non il vantaggio per regex in questa fase

Problemi correlati