reg_managerは正規表現をPerlっぽく簡単に扱うクラスです。
reg_managerはBoost.Regexのラッパです。使うためには、Boostのインストールとビルドが必要です。
最初に、次のようにgimite::reg_manager型の変数を作ります。
#include <gimite/reg_manager.h>
gimite::reg_manager rm;
あとは、gimite::reg_managerのメンバ関数を使って検索、置換を行います。以下にPerlの文との対応を書きます。
… } |
do{ … }while (rm.next()); } |
|
split(/exp/, str, n) |
rm.split(str, exp, "", n) |
この関数にはPerlのsplitと異なる所が2つ有ります。 まず、分割された部分はstrから削除されます(nが省略された場合、strは空になります)。 また、expが ( ) 表現を含む場合は意味が大きく変わり、expと一致する各部分について ( ) に対応する部分が出力されます。 |
下のようなクラス定義になっています。2バイト文字(日本語)交じりの文字列はUnicodeに変換してwreg_managerを使わないと正しく処理できません。文字コード変換にはバベルがお勧めです。
template <
class Char,
class Traits= boost::regex_traits<Char>,
class RTraits= def_regex_replace_traits<Char> >
class basic_reg_manager;
typedef basic_reg_manager<char> reg_manager;
typedef basic_reg_manager<wchar_t> wreg_manager;
Perlの正規表現機能の一部しかカバーしていませんが、Boost Regex++を直接使うよりはいくらか楽になると思います。機能の要望やバグ報告はメールで。
一応C++標準準拠のはずです。BCC 5.6.4 (BCB6)、Visual C++ .NET 2003、gcc 3.4.4で確認済み。
Boost 1.28〜1.33辺りに対応しているはずですが、最新版以外での動作確認はしていません。
このライブラリの再配布、改変、このライブラリを使用したソフトの配布は全て自由です。Boost Regex++の著作権はDr John Maddockに有ります。
1.7 … Boost 1.33に対応する。substitute()を追加。
1.6 … Boost 1.32に対応する。バグ修正。
1.5 … Boost 1.31に対応する。
1.4 … split()を追加。Boost 1.29以降では10個目以降の前方参照も保存するように変更。
1.3 … VC6に対応する。
1.2 … VC.NETに対応する。
1.1 … search()で"g"オプションを使えるようにする。
1.0 … 公開。
Gimite 市川 <gimite@mx12.freecom.ne.jp>