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

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

</p>

<h1>include &lt;iostream&gt;</h1>

<h1>include &lt;string&gt;</h1>

<h1>include &lt;regex&gt;</h1>

<p>// usage: a.exe pattern replace-to</p>

<p>using namespace std;</p>

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

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

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

<p>return 0;
}

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

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

投稿者:

dyama

佐世保のシステムエンジニアです。詳しいプロフィールやこのブログについてはこちらをご覧ください。

コメントを残す

メールアドレスが公開されることはありません。

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