reg_manager 1.7


○使い方

reg_managerは正規表現をPerlっぽく簡単に扱うクラスです。

reg_managerはBoost.Regexのラッパです。使うためには、Boostのインストールとビルドが必要です。

最初に、次のようにgimite::reg_manager型の変数を作ります。

#include <gimite/reg_manager.h>
 
gimite::reg_manager rm;

あとは、gimite::reg_managerのメンバ関数を使って検索、置換を行います。以下にPerlの文との対応を書きます。

Perl reg_manager 意味
str=~ /exp/ rm.search(str, exp) 文字列strから正規表現expに一致する部分を探す。見つかれば非0。
str=~ /exp/i rm.search(str, exp, "i") 大文字・小文字を区別しない検索。
str=~ s/exp1/exp2/ rm.replace(str, exp1, exp2) 文字列strの正規表現exp1に一致する最初の部分を正規表現exp2で置換する。
str=~ s/exp1/exp2/g rm.replace(str, exp1, exp2, "g") 文字列strの正規表現exp1に一致する全ての部分を正規表現exp2で置換する。
str=~ /^exp$/ rm.match(str, exp) 文字列strが正規表現expに完全に一致する場合にtrue。
$n rm.str(n) 直前のsearch()、match()の結果、expn番目の ( ) に対応した部分。
rm.position(n) 直前のsearch()、match()の結果、expn番目の ( ) に対応した部分の位置。
rm.length(n) 直前のsearch()、match()の結果、expn番目の ( ) に対応した部分の長さ。
while (str=~ /exp/g){
 …
}
if (rm.search(str, exp, "g")){
 do{
  …
 }while (rm.next());
}
文字列strの正規表現expに一致する全ての部分について、処理を繰り返す。
split(/exp/, str)
split(/exp/, str, n)
rm.split(str, exp)
rm.split(str, exp, "", n)
文字列strを正規表現expに一致する部分で(最大n個に)分割し、std::vector<std::string>として返す。
この関数にはPerlのsplitと異なる所が2つ有ります。
まず、分割された部分はstrから削除されます(nが省略された場合、strは空になります)。
また、exp( ) 表現を含む場合は意味が大きく変わり、expと一致する各部分について ( ) に対応する部分が出力されます。
rm.substitute(str, exp1, exp2) replace()とほぼ同じだが、strは変更せずに、置換後の文字列を戻り値として返す。

下のようなクラス定義になっています。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++を直接使うよりはいくらか楽になると思います。機能の要望やバグ報告はメールで。


○対応コンパイラ/対応Boostバージョン

一応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>