tr1の正規表現ライブラリを使う

Microsoft Visual Studio 2008 の SP1 からは C++ Technical Report 1 (TR1)をサポートしているので、Boost やPCRE などのライブラリを用いずに正規表現を扱うことができます。

[cpp]

include <iostream>

include <string>

include <regex>

// usage: a.exe pattern replace-to

using namespace std;

int main(int c, char** v)
{
if (c != 3) return 1;

tr1::regex ex(v[1]); // 正規表現オブジェクト
char buf[256]; // 読み取り用のバッファ

while (cin.getline(buf, sizeof(buf)))
cout << tr1::regex_replace(string(buf), ex, string(v[2])) << endl;

return 0;
}
[/cpp]

Boost のコードと比べれば、名前空間が boost から tr1 に変わったこと、regex ヘッダが標準パスに入ったこと、regex_replace() の第3引数が char* から std::string に変わったことくらいでしょうか。Boost からの移植ですので、互換性があって当然ですね。

C++11 では、名前空間がさらに tr1 から std に移されているようです。TR1 は C++ の言語自体の規格ではないものの、拡張ライブラリの標準規格ですので、名前空間などの移り変わりに注意しておけば、今後も安心して使っていけると思われます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください