boost::regex

トップページ > 文字列 >

abstract

必要なヘッダ
<boost/regex.hpp>
出来ること
正規表現
リファレンス
en / jp / jp (pdf)

sample

サンプルの動作確認バージョン [GCC4.4/1.41.0] [VC9/1.41.0]

#include <iostream>
#include <string>
#include <boost/regex.hpp>
using namespace std;

int main()
{
	// <で始まって>で終わる文字列にマッチする正規表現で検索
	boost::regex  r( "<[^>]+>" );
	boost::smatch m;
	string str1 = "The HTML tag <title> means that ...";

	if( boost::regex_search(str1, m, r) )
	{
		cout << "found (pos=" << m.position() << ")" << endl;
		cout << " ==> " << m.str() << endl;
	}

	// マッチした部分を、前後に#を付けた文字列で置換する
	boost::regex r2( "A([1-9]*|[a-z]*)A" );
	string str2 = "A123A AaaaA A3b3A A9A";

	{
		cout <<
			boost::regex_replace(
			  str2, r2, "#$0#", boost::format_all )
		<< endl;
	}
	return 0;
}

出力例

found (pos=13)
 ==> <title>
#A123A# #AaaaA# A3b3A #A9A#

etc

このコンポーネントを使うためだけにboostを導入する、 という方もおそらく相当多いのではないかと思います。

標準の strstr 関数や std::string::find では、完全にピッタリと一致する部分を探すことはできても、 「tで始まる単語」みたいな幅のある検索をすることは、 当たり前ですが出来ません。その辺りの強力な文字列処理をしたい時には、 各種スクリプト言語や、最近ではJavaなどでも正式にサポートされている 「正規表現」が必須となってきます。その機能を実装したのがこのライブラリ。 慣れるとかなり便利です。

このライブラリは、Boost 1.31 でクラス名や関数名を中心に、 大幅な変更が加えられました。旧バージョンを使用されていた方は注意が必要です。

see also

旧バージョンベースの解説ですが、Boost.Regexの詳細記事としては、 επιστημη氏による次のページがGoodです。(reg_expression の代わりに basic_regex としておけば、 だいたいのサンプルは動くみたいです。)

あと、Boostにはもう一つ別の新しい正規表現ライブラリ Xpressive があります。

また、Boost.Regex のインターフェイスを基本的に踏襲した形で、標準ライブラリ拡張案 TR1 に正規表現が実装されています。最新のC++コンパイラではTR1の正規表現も使用可能です。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0