Boost.Regex ライブラリの導入

提供:yonewiki

言語と開発環境に戻る。

概要

 Boost.Regexは正規表現による文字列の検索・置換の処理を高速かつ多機能にするライブラリです。標準ライブラリのstd::regexもありますが、大きな違いが認められるほどのモノで利用者も多いライブラリです。人気。ですね。Boost.RegexはBoostというライブラリの正規表現に関する部分的なライブラリで、全部を導入しなくててもBoost.Regexだけを単独で、つまりスタンドアローンモードで使うことができるとされています。


 ここでは、Boost.Regexのスタンドアローンモードでの導入方法・インストール・ビルド?・設定について記述したいと思います。ただし、記事作成中にあっては、管理人も使い方をわからない手探りで進めていく感じなので、記事が完成するまでは、ただの日記です。難しそうなので、考えながらやっていく感じです。


 まずは入手についてですが、github(巨大なソースコード集積siteです)から入手します。https://github.com/boostorg/regexからCodeボタンのDownload ZIPを選択すると一式を入手できます。ログインしていないと簡単にはダウンロード出来ません。


 これでBoost.Regexだけを入手できたので、includeディレクトリのファイルとsrcディレクトリのファイルがあれば都度link処理は必要になりますが、Boost.Regexの各種関数が使えるようになります。あとはUnicodeの全てを司るICUライブラリを使うかとかの調整が必要になるのかな。


 libファイルがあれば、includeファイルとlibファイルの組み合わせで扱うこともできますが、libファイルを作るにはBoost全体を入手して、Boostrap.batファイルを動かしたあとにb.exeを使ってlibファイルを生成するような手順が必要になります。


 srcがあれば、デバッグも内部まで追いかけることができて勉強になったりもしますので、一長一短ですね。何長何短かは考え方次第です。時間があればlibファイルを使う手順もあとで追記してみたいと思います。ここではまず最初にソースとインクルードファイルだけで扱ってみたいと思います。ICUありと無しもね。まずは無しから。


特定のプロジェクトだけで使う場合

 Boost.Regexを何度も使うときには、いつでも使えるように、特定のディレクトリにおいておいて、ちょっとプロジェクトを設定すれば使えるみたいにして使うのがオススメですが、特定のプロジェクトだけで使う場合はプロジェクトのフォルダの中にソースとインクルードファイルを読み込ませればよいわけです。具体的にやってみましょう。


 Boost.Regexのexampleフォルダにあるコンソールアプリケーションサンプルを動かしてみます。なので、Windowsコンソールアプリケーションを作る要領で新規プロジェクトを作成します。


 そしたら、プロジェクトの*.vcxprojファイルのあるフォルダにboost-regexという名前のフォルダを作って、boost.regexのファイル一式のregex-developフォルダの中にあるincludeフォルダとsrcフォルダをboost-regexの中に貼り付けましょう。


 そしたらexampleプログラムをコピーしてmain関数が作成された「プロジェクト名.cpp」に貼り付けます。regex-developフォルダの中のexampleフォルダの中のsnippetsフォルダの中のregex_grep_example_1.cppはBoost.Regexだけで動かせるサンプルになっています。exampleフォルダの中のgrepフォルダの中にあるサンプルは動かせません。動かすにはBoost.program_optionsというリポジトリも必要になるためです。なので、Boost.Regexのリポジトリからもってきたファイル一式だからといって、exampleフォルダにある全部が動かせるとは限らないことに注意が必要です。


 regex_grep_example_1.cppの中身をペロッと貼り付けます。


 そしたら、以下のようにプロジェクトを設定します。


 プロジェクトのプロパティから以下を設定します。

  • [構成プロパティ]-[C/C++]-[全般]の「SDLチェック」を「いいえ(/sdl-)」を選択します。
  • [構成プロパティ]-[VC++ディレクトリ]の「外部インクルードディレクトリ」の後部に「;boost-regex\include」を追記します。
  • [構成プロパティ]-[デバッグ]の「コマンド引数」に「(プロジェクトファイルを作ったフォルダへのフルパス)\boost-regex\include\boost\regex\concepts.hpp」


 このサンプルプログラムは、コマンド引数に与えられたファイルパスにあるファイルからclass定義を見つけてそのclass名を抽出する正規表現grepを実行するものです。なのでコマンド引数に、クラスを保持するテキストファイルへのパスを設定しました。デバッグ時はプロジェクトからの相対パスでもよいでしょう。実行ファイルから起動するときは、実行ファイルが配置されたディレクトリからの相対パスである必要があります。


 Boost.Regexはstrcpyやstrcmpやstrcatなどの古い関数を使うのでSDL(Security Development Lifecycle)チェックをはずす必要もあります。


 そして、ソリューションエクスプローラのソースファイルフィルタ項目の上で右クリックして表示されるメニューから[追加]-[既存の項目]を選択してプロジェクトを作成したディレクトリの中のBoost-Regexの中のsrcの中のソースファイル5つを選択してプロジェクトに追加します。


 これで、準備ができたのでこのサンプルを動かすプロジェクトをビルドします。メニューの[ビルド]-[ソシューションのビルド]を実行します。ビルドがうまくいくと思います。


 そしたら、ブレークポイントを設定しなくてもよいので、ローカルWindowsデバッガーボタンをおして実行してみましょう。


 以下のような結果が得られます。


Processing file (プロジェクトファイルを作ったフォルダへのフルパス)\boost-regex\include\boost\regex\concepts.hpp
13 matches found
class "BaseRegexConcept" found at index: 8459
class "BitmaskConcept" found at index: 5600
class "BoostRegexConcept" found at index: 31770
class "RegexConcept" found at index: 24052
class "RegexTraitsConcept" found at index: 6054
class "allocator_architype" found at index: 2402
class "char_architype" found at index: 1279
class "functor1" found at index: 30965
class "functor1b" found at index: 31182
class "functor2" found at index: 31390
class "functor3" found at index: 31520
class "rebind" found at index: 2673
class "regex_traits_architype" found at index: 3794

(プロジェクトファイルを作ったフォルダへのフルパス)\x64\Debug\BoostSample.exe (プロセス 4908) は、コード 0 で終了しました。
デバッグが停止したときに自動的にコンソールを閉じるには、[ツール] -> [オプション] -> [デバッグ] -> [デバッグの停止時に自 動的にコンソールを閉じる] を有効にします。
このウィンドウを閉じるには、任意のキーを押してください...


 特定のプロジェクトにBoost.Regexを追加して、ビルドする手順は習得できたので、これで一つの使い方についてできることになったわけですからBoost.Regexを使えるようになったということです。次はICUを使う例を紹介したいですが、以前にICUを使ったときからはパソコンが入れ替わっているので、また導入からになります。ICU...また後日、記事を追加することになります。今は、説明することはしばらく保留にしておきたいと思います。使えるのが大事だからね。


 

言語と開発環境に戻る。