3

一部のC++文字列解析に「TR1」正規表現拡張機能を利用しようとしています。<regex>これにはヘッダーと名前空間std::tr1が必要であることを読みました

ヘッダーが存在する状態でコンパイルできます<regex>(ただし、フラグ -std=c++0xまたはのいずれかを使用する必要があります-std=gnu++0x

ただし、プログラムで名前空間を使用しようとするとstd::tr1、tr1が「名前空間名ではありません」というメッセージが表示されてコンパイルが失敗します。私は次のようなことはできません、

std::tr1::regex rx("mypattern");

TR1正規表現がgcc4.3.0以降サポートされていることを読みました。私はg++からgcc4.4.5を使用しています。

私は何かが足りないのですか?

4

1 に答える 1

8

g++4.7はまだ正規表現を実装していません。

しかし、その事実にもかかわらず、C++11regexでは名前空間std::tr1からに移動されましたstd。したがって、の代わりにstd::tr1::regex、次のように記述する必要がありますstd::regex

std::regex rx("mypattern");

4.7より前のどのg++バージョンにもこれが当てはまるかわかりません。しかし、このideoneの例は、g++4.7で正常にコンパイルされます。ただし、このコンパイラバージョンでは正規表現の実装は実装されていないことに注意してください。

于 2013-02-12T18:52:30.517 に答える