バナーをクリックすれば目次に戻ります
Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.
RWCRegexp
#include <rw/regexp.h>
RWCRegexp re(".*\\.doc");// 接尾辞 ".doc" を持つファイル名と一致する
正規表現 (RE) は次の規則にもとづいて作成されます。
1 文字 RE は、次の規則によって単一文字と一致します。
1.1 特殊文字として定義されていない文字はすべて、それ自身と一致します。
1.2 バックスラッシュ (\) の後ろに特殊文字が続くと、そのリテラル文字自身と一致します (つまり、特殊文字をエスケープします)。
1.3 特殊文字とは、次のものを指します。
+ * ? . [ ] ^ $1.4 ピリオド (.) は、復帰改行を除くすべての文字と一致します。たとえば、".umpty" は "Humpty" や "Dumpty" と一致します。
1.5 角括弧 ([ ]) に囲まれた文字セットは、その文字セット内の任意の文字と一致する 1 文字 RE を表します。たとえば "[akm]" は、"a" や "k"、または "m" を表します。文字の範囲は、ダッシュで示します。たとえば "[a-z]" は、小文字の英字すべてを表します。ただし、文字セットの最初の文字が山型記号 (^)ならば、RE は文字セット内の文字以外の文字を表します。空の文字列は表しません。たとえば "[^akm]" は、"a"、"k"、および "m" 以外の文字を示します。山型記号は、文字セット内の最初の文字でなければ、このような特殊な意味は持ちません。
複数文字 RE は、次の規則にもとづいて構築されます。
2.1 1 文字 RE の後ろにアスタリスク (*) が続くと、その RE がゼロ個以上続いたものに一致します。たとえば "[a-z]*" は、ゼロ個以上の小文字の英字と一致します。
2.2 1 文字 RE の後にプラス記号 (+) が続くと、その RE が 1 個以上続いたものに一致します。たとえば "[a-z]+" は、1 個以上の小文字の英字と一致します。
2.3 疑問符 (?) はオプションの要素で、それに先行する RE をゼロ個か 1 個、文字列の中に発生させます。たとえば "xy?z" は、"xyz" か "xz" と一致します。
2.4 RE を連結すると、連結した文字列に一致します。たとえば "[A-Z][a-z]*" は、大文字で始まる語と一致します。
さらに、記された正規表現全体を、行の始めか終わりだけに限定することもできます。
3.1 山型記号 (^) が RE の最初にあれば、文字列は行の始めで一致しなければなりません。
3.2 ドル記号 ($) が RE の最後にあれば、文字列は行の終わりで一致しなければなりません。
次のように、エスケープコードを使用して制御文字と一致させることができます。
| \b | バックスペース |
| \e | ESC (エスケープ) |
| \f | フォームフィード |
| \n | 復帰改行 |
| \r | キャリッジリターン |
| \t | タブ |
| \xddd | リテラル 16 進数 0xddd |
| \ddd | リテラル 8 進数 0ddd |
| \^c | 制御コード (たとえば \^D は "control-D") |
#include <rw/regexp.h>
#include <rw/cstring.h>
#include <rw/rstream.h>
main() {
RWCString aString("Hark! Hark! the lark");
// "l" で始まる任意の小文字単語と一致する正規表現
RWCRegexp reg("l[a-z]*");
cout << aString(reg) << endl; // "lark" を出力
}
|
RWCRegexp(const char* pat);
RWCRegexp(const RWCRegexp& r);
~RWCRegexp();
RWCRegexp& operator=(const RWCRegexp&);
RWCRegexp& operator=(const char* pat);
size_t index(const RWCString& str,size_t* len, size_t start=0) const;
statVal status();
| statVal | 意味 |
|---|---|
| RWCRegexp::OK | エラーなし |
| RWCRegexp::ILLEGAL | パターンが不当 |
| RWCRegexp::TOOLONG | パターンが最大長を超えた1 |
| 1
パターンに割り当てた領域を変更するには、ファイル regexp.cpp を編集して RWCRegexp::maxval_ の値を変更します。それから、変更したオブジェクトを再コンパイルし、適切なライブラリに挿入します。
|
