正規表現を使用して、コマンド ライン引数の拡張子が .dat であることを確認しています。次の正規表現を試しています:
#define to_find "^.*\.(dat)?"
何らかの理由で、この質問のタイトルで述べた警告が表示されます。まず、この表現は正しいですか?私はそう信じています。第二に、正しい場合、どうすればこの警告を取り除くことができますか?
Xcode で ac プログラムをコーディングしていますが、上記の #define は .h ファイルにあります。ありがとう!
警告は C コンパイラから来ています。これは\.、C の既知のエスケープ シーケンスではないことを示しています。この文字列は正規表現エンジンに送信されるため、次のようにスラッシュを二重にエスケープする必要があります。
#define to_find "^.*\\.(dat)?"
.datこの正規表現は、オプションの拡張子を持つ文字列と一致しdatます。ただし、ドット.は必須です。ドットもオプションにしたい場合は、次のように括弧の中に入れます^.*(\\.dat)?。
次のように、角括弧で囲むことにより、個々のメタ文字のエスケープを回避できることに注意してください。
#define to_find "^.*([.]dat)?"
あなたが必要
#define to_find "^.*\\.(dat)?"
\ は C 用にエスケープする必要があり、この段階では正規表現の利点ではないため、トリックを実行する必要があります