正規表現エンジンメモ #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() で終了を判定すればよいのになぁ、と思った。