2017-11-05 4 views
-1

私は正規表現について学び始めており、C++でコードを書いています 私の仕事は:与えられた文字列の各桁を'@'文字で置き換える関数を実装します。C++の正規表現で dの代わりに dを書く必要があるのはなぜですか?

私の例では、input文字列= "12 points"です。

数字が一致するのに\dを使用する必要があることがわかりました。私はこれを使用しようとしました:std::regex_replace(input,std::regex("\d"),"@"); しかし、それは動作していません:outputはまだ"12 points"です。

は、その後、私はインターネットを検索し、結果は次のとおりです。outputstd::regex_replace(input,std::regex("\\d"),"@");"@@ points"です。

"\\d"は何ですか?

+0

2つのバックスラッシュを使用する必要はありません。文字列リテラルの 'R"(\ d) "'を使用します。リテラルのエスケープを作成するために必要なのはリテラルのバックスラッシュです。 –

答えて

0

\dは小数が、しかし、正規表現では、\はあなたが脱出\\dで、したがって、だけでなく、独自にエスケープする必要がある特殊文字、ある意味します\これは特別な意味ではなく、通常の文字として使用するようにマークします

0

C++アプリケーションで "\ d"を使用すると、\はC++のエスケープ文字になります。したがって、以下のdをdとは扱わない。

Regexは\ dを持たない文字列を取得しますが、空の文字列(\ dは私の知る限りC++では何も評価しないため)が得られます。

"\ d"を使用すると、エスケープしています。だからC++は "\ d"という文字列をあなたが意図したとおりに読み込みます。

エスケープ文字を使用する例は、引用符を出力する場合です。 「\」」でしょう出力単一二重引用符。

関連する問題