2013-08-27 11 views
19

Używam wyrażenia regularnego, aby określić, że argument wiersza poleceń ma rozszerzenie .dat. Próbuję następujący regex:Ostrzeżenie kompilatora C Nieznana sekwencja ucieczki '.' za pomocą regex dla programu c

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

Z jakiegoś powodu otrzymuję ostrzeżenie, które stawiam w tytule tego pytania. Po pierwsze, czy to wyrażenie jest poprawne? Wierzę, że tak jest. Po drugie, jeśli to prawda, jak mogę się pozbyć tego ostrzeżenia?

Kodowania programu c w Xcode i powyższe # definicja jest w moim pliku .h. Dzięki!

Odpowiedz

33

Ostrzeżenie pochodzi z kompilatora C. To jest mówienie, że \. nie jest znana sekwencja ucieczki w C. Ponieważ ten ciąg będzie regex silnika, trzeba dwukrotnie uciec ukośnik, tak:

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

To wyrażenie regularne będzie pasować ciąg z opcjonalnym rozszerzeniem .dat, z dat jako opcjonalnym. Wymagana jest jednak kropka .. Jeśli chcesz, aby kropka była opcjonalna, umieść ją w nawiasach, tak: ^.*(\\.dat)?.

pamiętać, że można uniknąć ucieczki indywidualne metaznaki przez umieszczenie ich w nawiasach kwadratowych, na przykład:

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

Trzeba

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

powinno wystarczyć jak potrzebuje \ być uciekł dla C, a nie na korzyść dla regex na tym etapie

Powiązane problemy