ホーム 主筆 その他ソフト その他情報 Syuhitu.org English

Windows関連

スクリーンセーバー作成法

半透明ウインドウの性能

bootfont.bin

キャビネット形式

ウインドウスタイルをいじる

Java製ソフトをServiceに登録する

イベントログにメッセージを出力する

コントロールパネルにアイコンを追加する

スクリプトによる拡張1

スクリプトによる拡張2

ガジェットの作成

大容量メモリ

メモリ搭載量の下限に挑む

スパースファイルにする

表示されるアイコンの種類を調べてみた

メモリマップIOとエラー処理

ファイルを作る順番と速度の関係

Cryptography API: Next Generationを使う

Windows 10のアクセントカラー

iSCSIディスクにバックアップを取る

サーバプロセスを分離して実装する

サーバプロセスを分離して実装する - F#

レジストリに大量に書き込む

Solaris関連

OpenGL

Solaris設定

ディレクトリの読み込み

主筆プラグイン開発

マルチスレッドでの開発

door

音を出す

Blade100の正しい虐め方

パッケージの作成

画像入出力

BMPファイル

ICOファイル

ANIファイル

JPEGファイル

減色アルゴリズム

減色アルゴリズムの並列化

その他アルゴリズムなど

自由軸回転

Base64

文字列操作

CPU利用率の取得

正規表現ライブラリ

メタボールを作る

メタボールを作る2

正規表現とNFA・DFA

C言語の構文解析

液晶ディスプレイを解体してみた

iSCSIの理論と実装

単一フォルダにファイルを沢山作る

USB-HUBのカスケード接続

SafeIntの性能

VHDファイルのフォーマット

USBメモリに書き込み続けてみた

SRegex仕様

  1. インタフェース
  2. 正規表現
  3. エラー値

ライブラリ インタフェース

ヘッダファイル

 SRegexを使用するためには、「SRegex.h」をインクルードする。

名前空間

 SRegexは、名前空間「N_SRegex」で定義されている。

インスタンス生成

 SRegexを使用するためには、クラス「SRegex」のインスタンスを生成する必要がある。

 型と宣言の方法は以下の通り。

SRegex< T_Char, T_PtnPtr, T_Text > インスタンス名;

T_Char

 「一文字」を表現するのに使用するデータ型を指定する。charwchar_tなど。 以下の条件を満たす型を指定すること。

  1. wchar_t型の引数をもつ、コンストラクタが定義されていること。
  2. デフォルトコンストラクタを持つこと。
  3. bool operator ==( const T_Char &r ) const;が定義されていること。
  4. const T_Char& operator =( const T_Char &r );が定義されていること。

T_PtnPtr

 正規表現の文字列をポイントする、ポインタ型を指定する。const char*やconst wchar_t*など。 以下の条件を満たす型を指定すること。

  1. デフォルトコンストラクタを持つこと。
  2. T_Char operator *() const;が定義されていること。
  3. T_PtnPtr* operator ++();が定義されていること。
  4. bool operator ==( const T_PtnPtr& r ) const;が定義されていること。
  5. const T_PtnPtr& operator =( const T_PtnPtr& r );が定義されていること。
  6. パターンの末尾で、T_Char( '\0' )を返すこと。

T_Text

 検索対象の文字列をポイントする、ポインタ型を指定する。const char*やconst wchar_t*など。 以下の条件を満たす型を指定すること。

  1. デフォルトコンストラクタを持つこと。
  2. T_Char operator *() const;が定義されていること。
  3. T_Text* operator ++();が定義されていること。
  4. bool operator ==( const T_Text& r ) const;が定義されていること。
  5. const T_Text& operator =( const T_Text& r );が定義されていること。
  6. パターンの末尾で、T_Char( '\0' )を返すこと。

なお、SRegexは正規表現のパターン及びマッチング対象の文字列の末尾に、'\0'が格納されていることに依存している。 自分で実装したクラスを指定する場合には、十分に注意すること。

メソッド

 SRegexには、以下のメソッドが存在する。

bool Initialize( T_Ptn pattern );

pattern

 正規表現のパターンを指定する。

戻り値

 成功すれば真。失敗すれば偽を返す。

概要

 指定した正規表現を元に、NFAを構築する。失敗した際の、詳細なエラー値は「GetLastError()」により取得できる。

bool FindMatchStr( T_Text pText, T_Text *ppSPos, T_Text *ppEPos );

pText

 検索対象のテキストを指定する。

ppSPos

 マッチした範囲の開始位置を取得するための、ポインタのアドレスを指定する。

ppEPos

 マッチした範囲の終了位置を取得するための、ポインタのアドレスを指定する。

戻り値

 マッチした部分が存在すれば真を返す。マッチしなければ偽を返す。

概要

 指定したテキスト中に、マッチする範囲があるか否かを検索する。マッチした場合は、その範囲をppSPos及びppEPosに返す。 マッチする範囲が複数箇所存在する場合は、テキストの一番先頭に存在する部分を返す。

bool Match( T_Text pText, T_Text *ppEPos );

pText

 検索対象のテキストを指定する。

ppEPos

 マッチした範囲の終了位置を取得するための、ポインタのアドレスを指定する。

戻り値

 マッチすれば真を返す。マッチしなければ偽を返す。

概要

 指定したテキストがマッチするか否かを検査する。

void GetBackwardInfo( std::vector< std::pair< T_Text, T_Text > > *pVec ) const;

pVec

 値を取得するための配列を指定。

概要

 前方参照を行う正規表現グループの、それぞれのマッチした範囲を取得する。 Match及びFindMatchStrメソッドにより検索が行われ、テキストがマッチしていない場合には、情報は取得できない。

SREGEX_ERR GetLastError() const;

概要

 エラー値を取得する。

T_Ptn GetErrorPos() const;

概要

 エラー発生箇所を取得する。


正規表現 文法

 正規表現として以下の構文を使用する。

構文 説明
X 文字X
(X) 演算子の優先順位の変更
(^X) 演算子の優先順位の変更&前方参照する正規表現グループ
X|Y or
[X] 文字クラスの指定
[^X] 文字クラスの指定(否定)
{X} 0回以上の繰り返し(怠惰なマッチ)
{^X} 0回以上の繰り返し(貪欲なマッチ)
\xnnnn 文字コードによる文字の指定。nは16進数(0からf)。最大4桁。
\znnnn マッチしたn番目の前方参照を行う正規表現グループ。nは16進数(0からf)。最大4桁。

前方参照について

 前方参照を行う正規表現グループの番号は「(^」が出現した順番に0から通番で振られていく。 「\znnnn」で参照可能な正規表現グループは、その前に出現した正規表現グループのみを参照することが可能。 また、正規表現グループ内で当該の正規表現グループを参照する事はできない。つまり、

ABC(^opq\z0000rst)XYZ

などといった使用法は不可能である。 また、上記のような正規表現では、エラー「SRE_UNDEFINED_BACKWARD」となるが、

AB(^C(^opq\z0000rst)X)YZ

とした場合には、エラーとはならない。 ただし、\z0000は(とりあえず)長さ0の文字列にマッチしたものとして扱われる。よって、このような使用法もするべきではない。

ループ内で使用する前方参照について。

 ループ「{XYZ}や、{^XYZ}」内に、前方参照を行う正規表現グループが含まれていた場合、 当該のループ内で参照する場合は正しい値となる。しかし、当該のループを抜けた後で参照した場合は、最後にマッチした文字列とマッチする事となる。 たとえば、下記のような正規表現を考える。

ABC{opq(^...)rst\z0000uvw}DEF

 これは、下記のようなテキストとマッチする。

ABCopq012rst012uvwDEF
ABCopq012rst012uvwopq012rst012uvwDEF
ABCopq012rst012uvwopq345rst345uvwDEF

 しかし、以下のようなテキストとはマッチしない。

ABCopq012rst345uvwopq012rst345uvwDEF

 また、\z0000を{}の外で使用した場合、

ABC{opq(^...)rst}DEF\z0000GHI

 下記のようなテキストとマッチする事となる。

ABCopq012rstopq345rstDEF345GHI

 これは「GetBackwardInfo」で取得する値についても同じである。


エラー値

 エラー値とその意味は、下記の通りである。

説明
SRE_NON エラーは発生していない。
SRE_EOF_NOT_ANTICIPATED 予期しないEOFを検出した。
SRE_OUT_OF_MEMORY メモリが不足している。
SRE_UNCERTAIN_CHAR 不明な文字を発見した。
SRE_ZERO_LENGTH_PTN パターンが存在しない。
SRE_UNDEFINED_BACKWARD 不正な前方参照。
SRE_UNEXPENTED その他のエラー。

 なお、「SRE_EOF_NOT_ANTICIPATED」は、パターンの末尾に\が存在する場合などに発生する。 また、「SRE_ZERO_LENGTH_PTN」は、「()」や「(ABC|)」など、パターンが入力されなければならない位置に、パターンが存在していない場合に発生する。


連絡先 - サイトマップ - 更新履歴
Copyright (C)  2000 - 2016 nabiki_t All Rights Reserved.