正規表現エンジンメモ #2
正規表現エンジンメモ - satosystemsの日記 の続きです。
SRegex
「主筆」という Solaris で動作するテキストエディタを作成されている方の、主筆のための正規表現エンジン。
世の中に存在する正規表現ライブラリのほとんどが「文字列は文字型の配列で実装されていること」を前提としている。
http://www.syuhitu.org/other/regex/regex.html
同意。
そもそも、正規表現ライブラリたるものは、「正規表現のアルゴリズム」のみを実装すべき物であって、処理されるべきデータのデータ型には依存する べきではないはずだ。
http://www.syuhitu.org/other/regex/regex.html
これも同意。
僕の現時点で知る限りでは、イテレータで入力を受け付けるのは Boost Regex のみだったが、思わぬ伏兵がいた。
上記ページの例を一部引用。
text.push_back( L'O' ); text.push_back( L'P' ); text.push_back( L'A' ); text.push_back( L'B' ); text.push_back( L'C' ); text.push_back( L'Q' ); text.push_back( L'R' ); text.push_back( L'S' ); text.push_back( L'X' ); text.push_back( L'Y' ); text.push_back( L'Z' ); text.push_back( L'T' ); text.push_back( L'U' ); text.push_back( L'\0' ); // 必ず必要 // regexの初期化 if ( !regex.Initialize( Pattern ) ) return 0; // 検索する if ( !regex.FindMatchStr( text.begin(), &wp1, &wp2 ) ) return 0;
リストの最後に NULL Terminate が必要なのがいまひとつ。せっかくイテレータを使用するんだから、この場合、text.end() で終了を判定すればよいのになぁ、と思った。