バナーをクリックすれば目次に戻ります
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_ の値を変更します。それから、変更したオブジェクトを再コンパイルし、適切なライブラリに挿入します。
|