19

正規表現を使用して、コマンド ライン引数の拡張子が .dat であることを確認しています。次の正規表現を試しています:

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

何らかの理由で、この質問のタイトルで述べた警告が表示されます。まず、この表現は正しいですか?私はそう信じています。第二に、正しい場合、どうすればこの警告を取り除くことができますか?

Xcode で ac プログラムをコーディングしていますが、上記の #define は .h ファイルにあります。ありがとう!

4

2 に答える 2

36

警告は C コンパイラから来ています。これは\.、C の既知のエスケープ シーケンスではないことを示しています。この文字列は正規表現エンジンに送信されるため、次のようにスラッシュを二重にエスケープする必要があります。

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

.datこの正規表現は、オプションの拡張子を持つ文字列と一致しdatます。ただし、ドット.は必須です。ドットもオプションにしたい場合は、次のように括弧の中に入れます^.*(\\.dat)?

次のように、角括弧で囲むことにより、個々のメタ文字のエスケープを回避できることに注意してください。

#define to_find "^.*([.]dat)?"
于 2013-08-27T23:41:12.890 に答える
3

あなたが必要

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

\ は C 用にエスケープする必要があり、この段階では正規表現の利点ではないため、トリックを実行する必要があります

于 2013-08-27T23:50:35.057 に答える