2013-08-27 15 views
19

Bir komut satırı argümanının .dat uzantısına sahip olduğunu belirlemek için regex kullanıyorum. Ben bu sorunun başlığında belirtilen uyarı alıyorum NedenseC derleyici uyarısı Bilinmeyen çıkış sırası '.' c programı için regex kullanma

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

: Aşağıdaki regex çalışıyorum. İlk olarak, bu ifade doğru mu? Ben inanıyorum. İkincisi, eğer doğruysa, bu uyarıdan nasıl kurtulabilirim?

Xcode'ta bir c programı kodluyorum ve yukarıdaki #define .h dosyamda. Teşekkürler!

cevap

33

Uyarı, C derleyicisinden geliyor. \. bu dize regex motoruna gidiyor yana C. bilinen bir çıkış sırası olmadığını anlatıyor, böyle, eğik çizgi çift-kaçış gerekir:

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

Bu regex bir dize eşleşir Opsiyonel .dat uzantılı, dat opsiyoneldir. Bununla birlikte, . numaralı nokta gereklidir. Noktanın isteğe bağlı olmasını istiyorsanız, parantez içine şu şekilde ekleyin: ^.*(\\.dat)?. \ Kaçan gereken olarak

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

Sen hile yapmak mı

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

gerekir: Eğer böyle, köşeli parantez içine alınmak suretiyle bireysel meta karakterler kaçan önleyebilirsiniz

Not C için ve bu aşamada regex için yarar değil