4

両方の言語で同じ正規表現パターンを宣言したいと考えています。TCLの場合、私はこれを行います

set pattern "\d\s\S" 

しかし、C++の場合、同じパターンに対してこれを行う必要があります

boost::regex pattern("\\d\\s\\S");

それ以外の場合、C++ コンパイラは次のことを通知します。

warning C4129: 'd' : unrecognized character escape sequence

では、なぜ TCL は \d \s \S エスケープ記号を見つけようとせず、単に\-s を無視するのに、C++ は試みて失敗するのでしょうか?

PS PHP は TCL として機能します。

4

2 に答える 2

4

これがC++とPHPの違いです。PHPでは、円記号に続く文字は、特殊文字の小さなセットと照合されます(私は信じています"rnvtx")。一致が失敗した場合、意味を変更せずに続行されます。

ただし、C ++は、文字がその小さなセットに含まれていることを想定しています(セットは大きいと思います)が、一致が失敗した場合は、代わりにエラーが表示されます。

于 2012-12-21T08:49:17.627 に答える
1

C++ にはCharacter Escape Sequencesの概念があります。\c文字列リテラル内の特定の特殊文字を定義するために、形式をとるエスケープ シーケンス('c' は文字) が使用されるため、バックスラッシュ自体もエスケープして、特殊文字が暗示されていないことを示す必要があります。 .

于 2012-12-21T08:45:13.650 に答える