TNB Library
クラス | 公開型 | 公開メンバ関数 | 全メンバ一覧
CRegularExpressionT< TYP, ITE > クラステンプレート

正規表現管理クラステンプレート [詳解]

#include <TnbRegularExpression.h>

クラス

class  CFinder
 正規表現ファインダクラス [詳解]
 
struct  TFindResult
 Find() メソッド用リザルト [詳解]
 

公開型

enum  EOption { IGNORECASE = _BIT(0) }
 オプション. [詳解]
 

公開メンバ関数

 CRegularExpressionT (void)
 コンストラクタ [詳解]
 
TFindResult Find (ITE is, ITE ie=ITE(), CVectorT< CStrT< TYP > > *pGroupStr=NULL) const
 [検索] 検索 [詳解]
 
CFinder GetFinder (ITE is, ITE ie=ITE()) const
 [取得] ファインダー取得. [詳解]
 
size_t LookingAt (ITE is, ITE ie=ITE(), CVectorT< CStrT< TYP > > *pGroupStr=NULL) const
 [比較] 先頭マッチ [詳解]
 
bool Matches (ITE is, ITE ie=ITE(), CVectorT< CStrT< TYP > > *pGroupStr=NULL) const
 [比較] 全体マッチ [詳解]
 
CStrT< TYP > ReplaceAll (const TYP *lpsz, ITE is, ITE ie=ITE()) const
 [置換] 置き換え. [詳解]
 
void SetOption (DWORD dw)
 [設定] オプション設定. [詳解]
 
bool SetPattern (const TYP *lpsz)
 [設定] パターン設定. [詳解]
 
CVectorT< CStrT< TYP > > Split (ITE is, ITE ie=ITE(), int limit=0) const
 [取得] 分割. [詳解]
 

詳解

template<typename TYP, typename ITE = const TYP*>
class TNB::CRegularExpressionT< TYP, ITE >

正規表現管理クラステンプレート

一つの正規表現をコンパイルした物を管理します。
それを使って、文字列等と比較、検索、置換することが可能です。
正規表現構文の要約:
・文字
x  文字 x
¥¥  バックスラッシュ文字
¥0n  8 進値 0n を持つ文字 (0 <= n <= 7)
¥0nn  8 進値 0nn を持つ文字 (0 <= n <= 7)
¥0mnn  8 進値 0mnn を持つ文字 (0 <= m <= 3、0 <= n <= 7)
¥xhh  16 進値 0xhh を持つ文字
¥uhhhh  16 進値 0xhhhh を持つ文字
¥t  タブ文字 ('¥x09')
¥n  改行文字 ('¥x0A')
¥r  キャリッジリターン文字 ('¥x0D')
¥f  用紙送り文字 ('¥x0C')
¥e  エスケープ文字 ('¥x1B')
・定義済みの文字クラス
.  任意の文字
¥d  数字: [0-9]
¥D  数字以外: [^0-9]
¥s  空白文字: [ ¥t¥n¥x0B¥f¥r]
¥S  非空白文字: [^¥s]
¥w  単語構成文字: [a-zA-Z_0-9]
¥W  非単語文字: [^¥w]
・文字クラス
[abc]  a、b、または c (単純クラス)
[^abc]  a、b、c 以外の文字 (否定)
[a-zA-Z]  a 〜 z または A 〜 Z (範囲)
[a-d[m-p]]  a 〜 d、または m 〜 p: [a-dm-p] (結合)
[a-z&&[def]]  d、e、f (交差)
[a-z&&[^bc]]  b と c を除く a 〜 z: [ad-z] (減算)
[a-z&&[^m-p]]  m 〜 p を除く a 〜 z: [a-lq-z] (減算)
※文字列クラス内では、数量子,論理演算子,前方参照は、 ただの文字として認識されます。
・最長一致数量子
X?  X、1 回または 0 回
X*  X、0 回以上
X+  X、1 回以上
X{n}  X、n 回
X(n,}  X、n 回以上
X{n,m}  X、n 回以上、m 回以下
・最短一致数量子
X??  X、1 回または 0 回
X*?  X、0 回以上
X+?  X、1 回以上
X{n}?  X、n 回
X(n,}? X、n 回以上
X{n,m}?  X、n 回以上、m 回以下
※これらは、 X が任意の文字(ピリオド)を指定した時のみ、有効です。
・論理演算子
XY  X の直後に Y
X|Y  X または Y
(X) グループ(前方参照あり)
(?:X) グループ(前方参照なし)
X(?=Y) 肯定先読み
X(?!Y) 否定先読み
(?<=X)Y 肯定後読み
(?<!X)Y 否定後読み
・前方参照
¥n  マッチした n 番目の前方参照を行う正規表現グループ
正規表現グループと前方参照:
前方参照を行う正規表現グループには、左から右方向に左丸括弧を数えることによって、 番号が付けられます。たとえば、表現 ((A)(B(C))) は、次の 4 つのグループに分類さ れます。
1  ((A)(B(C)))
2  (A)
3  (B(C))
4  (C)
グループ 0 は、常に表現全体を表します。
引数
TYPchar (ASCII/SJIS) か WCHAR (UNICODE) を指定します。
ITETYPを扱うイテレータ。省略すると、 const TYP* になります。
使用例
// a,b,またはc であることを調査
VERIFY( re.SetPattern("[abc]") );
VERIFY( re.Matches("c") );
// ':'を敷居にしてテキストを分割
VERIFY( re.SetPattern(":") );
CAsciiVector va = re.Split("boo:and:foo", NULL, 3) );
// 小文字のアルファベットを検索
VERIFY( re.SetPattern("[a-z]") );
VERIFY( re.Find("123r789").foundIndex == 3 );
// 行の先頭がjavaという文字で始まっているか検索
VERIFY( re.SetPattern("^java") );
VERIFY( re.Find("javava").foundIndex, 0 );
VERIFY( re.Find("a java").foundIndex, INVALID_INDEX );
TNB::CVectorT< CAscii > CAsciiVector
文字列配列管理クラス
Definition: TnbStrVector.h:40
todo:
現在 ”.*//” のように、最長一致数量子の後に同じ文字があると、失敗します。 ”.*(?://)”のように記述が必要です。
必要ファイル
TnbRegularExpression.h
日付
07/09/01 新規作成
07/09/25 「グループに数量子をつけた直後に前方参照」に、対応。
07/09/29 グループを含んだグループに数量子をつけた時の動きを Java と同じにした。
08/02/13 (?:X) が未対応だった。対応。

TnbRegularExpression.h162 行目に定義があります。

列挙型メンバ詳解

◆ EOption

enum EOption

オプション.

マッチング方法を指定できます。

参照
SetOption
列挙値
IGNORECASE 

「欧文の大文字と小文字を区別しない」オプション

TnbRegularExpression.h171 行目に定義があります。

構築子と解体子

◆ CRegularExpressionT()

CRegularExpressionT ( void  )

コンストラクタ

TnbRegularExpression.h1232 行目に定義があります。

関数詳解

◆ Find()

TFindResult Find ( ITE  is,
ITE  ie = ITE(),
CVectorT< CStrT< TYP > > *  pGroupStr = NULL 
) const

[検索] 検索

覚え書き
最初にマッチした情報を返します。連続で検索する場合、 GetFinder()CFinder を取得したほうが便利です。
引数
[in]is対象情報の開始イテレータ。
[in]ie対象情報の番兵イテレータ。省略する場合、必ず NIL終端がある情報を使用してください。
[out]pGroupStr文字列の配列を指定するとグループの文字列を得ることができます。省略可能。
戻り値
リザルト。 foundSize が INVALID_SIZE なら見つからなかった。

TnbRegularExpression.h1342 行目に定義があります。

◆ GetFinder()

CFinder GetFinder ( ITE  is,
ITE  ie = ITE() 
) const

[取得] ファインダー取得.

引数
is対象情報の開始イテレータ。
ie対象情報の終了番兵イテレータ。省略するとデフォルトの番兵になります。
戻り値
ファインダー。

TnbRegularExpression.h1658 行目に定義があります。

◆ LookingAt()

size_t LookingAt ( ITE  is,
ITE  ie = ITE(),
CVectorT< CStrT< TYP > > *  pGroupStr = NULL 
) const

[比較] 先頭マッチ

覚え書き
本インスタンスが持っている条件と先頭マッチしているかチェックします。
引数
[in]is対象情報の開始イテレータ。
[in]ie対象情報の番兵イテレータ。省略する場合、必ず NIL終端がある情報を使用してください。
[out]pGroupStr文字列の配列を指定するとグループの文字列を得ることができます。 不一致でも一致したところまでは格納されます。省略することも出来ます。
戻り値
INVALID_SIZE不一致。
INVALID_SIZE以外 一致。

TnbRegularExpression.h1287 行目に定義があります。

◆ Matches()

bool Matches ( ITE  is,
ITE  ie = ITE(),
CVectorT< CStrT< TYP > > *  pGroupStr = NULL 
) const

[比較] 全体マッチ

覚え書き
本インスタンスが持っている条件と全体がマッチしているかチェックします。
引数
[in]is対象情報の開始イテレータ。
[in]ie対象情報の番兵イテレータ。省略する場合、必ず NIL終端がある情報を使用してください。
[out]pGroupStr文字列の配列を指定するとグループの文字列を得ることができます。 不一致でも一致したところまでは格納されます。省略することも出来ます。
戻り値
一致。
不一致。

TnbRegularExpression.h1305 行目に定義があります。

◆ ReplaceAll()

CStrT< TYP > ReplaceAll ( const TYP *  lpsz,
ITE  is,
ITE  ie = ITE() 
) const

[置換] 置き換え.

覚え書き
マッチした文字列を指定の置換文字列で置換します。その際、以下のキーワードが使用できます。
・キーワード
¥0〜¥9  マッチした文字列のブロックが挿入されます。
¥¥    ¥文字が挿入されます。
覚え書き
一つずつ確認しながら行う場合、 GetFinder() を使用します。
引数
lpsz置換文字列。
is対象情報の開始イテレータ。
ie対象情報の番兵イテレータ。省略する場合、必ず NIL終端がある情報を使用してください。
戻り値
置換結果文字列

TnbRegularExpression.h1675 行目に定義があります。

◆ SetOption()

void SetOption ( DWORD  dw)

[設定] オプション設定.

本パターンを使用する時のオプションを指定します。

覚え書き
一度指定すると、インスタンスが有効中、状態を保持します。
インスタンス作成時は、 オプションが一つも設定されていない状態です。
引数
dwオプションを指定します。同時に複数指定する場合は | で連結します。

TnbRegularExpression.h1243 行目に定義があります。

◆ SetPattern()

bool SetPattern ( const TYP *  lpsz)

[設定] パターン設定.

引数
lpszパターン
戻り値
true成功。
false失敗(パターン文字列に誤りあり)。

TnbRegularExpression.h1254 行目に定義があります。

◆ Split()

CVectorT< CStrT< TYP > > Split ( ITE  is,
ITE  ie = ITE(),
int  limit = 0 
) const

[取得] 分割.

覚え書き
このパターンのマッチに基づいて、指定された入力シーケンスを分割します。 このメソッドから返される配列は、入力シーケンスの部分文字列で構成されます。 これらの部分文字列は、このパターンとマッチする別の部分シーケンスによって 分割された文字列か、入力シーケンスの終了によって分割された文字列です。 配列内の部分文字列は、入力シーケンス内で発生した順番に並んでいます。 このパターンが入力シーケンスの部分シーケンスにマッチしない場合、 返される配列は 1 つの要素、つまり文字列形式の入力シーケンスだけで構成されます。
limit パラメータは、このパターンの適用回数、つまり、返される配列の長さを制御します。 制限 n がゼロより大きい場合、このパターンは n - 1 回以下の回数が適用され、 配列の長さは n 以下になります。 配列の最後のエントリには、最後にマッチした区切り文字以降の入力シーケンスがすべて含まれます。 n が負の値の場合、このパターンの適用回数と配列の長さは制限されません。n がゼロの場合、 このパターンの適用回数と配列の長さは制限されませんが、後続の空の文字列は破棄されます。
引数
is対象情報の開始イテレータ。
ie対象情報の番兵イテレータ。省略する場合、必ず NIL終端がある情報を使用してください。
limit適用回数。省略すると0が適用されます。
戻り値
分割した文字列群。

TnbRegularExpression.h1423 行目に定義があります。