クイックスタート
チュートリアル
ツールと言語
リファレンス
書籍レビュー
正規表現ツール
grep
PowerGREP
RegexBuddy
RegexMagic
汎用アプリケーション
EditPad Lite
EditPad Pro
言語とライブラリ
Boost
Delphi
GNU (Linux)
Groovy
Java
JavaScript
.NET
PCRE (C/C++)
PCRE2 (C/C++)
Perl
PHP
POSIX
PowerShell
Python
R
Ruby
std::regex
Tcl
VBScript
Visual Basic 6
wxWidgets
XML Schema
Xojo
XQuery と XPath
XRegExp
データベース
MySQL
Oracle
PostgreSQL
このサイトの詳細
はじめに
正規表現クイックスタート
正規表現チュートリアル
置換文字列チュートリアル
アプリケーションと言語
正規表現の例
正規表現リファレンス
置換文字列リファレンス
書籍レビュー
印刷可能なPDF
このサイトについて
RSSフィードとブログ
RegexBuddy—The best regex editor and tester for wxWidgets developers!

wxWidgetsは3つの正規表現フレーバーをサポートしています

wxWidgetsは、Henry SpencerによってTcl 8.2用に開発されたものと全く同じ正規表現エンジンを使用しています。つまり、wxWidgetsは同じ3つの正規表現フレーバーをサポートしています:Tcl拡張正規表現POSIX拡張正規表現、およびPOSIX基本正規表現。Tclとは異なり、はるかに強力なAREではなく、EREがデフォルトです。wxRegEx::Replace()メソッドは、Tclのregsubコマンドと同じ構文を置換テキストに使用します。

wxRegExクラス

wxWidgetsの正規表現エンジンを使用するには、wxRegExクラスをインスタンス化する必要があります。クラスには2つのコンストラクタがあります。wxRegEx()は空の正規表現オブジェクトを作成します。オブジェクトを使用する前に、wxRegEx::Compile(). を呼び出す必要があります。wxRegEx::IsValidは、呼び出すまでfalseを返します。

wxRegEx(const wxString& expr, int flags = wxRE_EXTENDED)は、コンパイルされた正規表現を持つwxRegExオブジェクトを作成します。コンストラクタは、正規表現が無効な場合でも、常にオブジェクトを作成します。正規表現が正常にコンパイルされたかどうかを確認するには、を呼び出す必要があります。wxRegEx::IsValidを確認してください。

bool wxRegEx::Compile(const wxString& pattern, int flags = wxRE_EXTENDED)は正規表現をコンパイルします。このメソッドは、コンパイル済みの正規表現を既に保持しているオブジェクトを含む、任意のwxRegExオブジェクトで呼び出すことができます。そうすることで、wxRegExオブジェクトによって保持されている正規表現が単純に置き換えられます。正規表現を最初の引数として文字列で渡します。2番目のパラメータでは、特定のマッチングオプションを設定できます。

正規表現フレーバーを設定するには、フラグwxRE_EXTENDED、wxRE_ADVANCED、またはwxRE_BASICのいずれかを指定します。フレーバーを指定する場合、wxRE_EXTENDEDがデフォルトです。常にwxRE_ADVANCEDフラグを指定することをお勧めします。AREはEREよりもはるかに強力です。すべての有効なEREは有効なAREでもあり、同じ結果が得られます。EREフレーバーを使用する唯一の理由は、wxWidgetsが「組み込み」正規表現ライブラリ(つまり、Henry Spencerのコード)なしでコンパイルされる場合にコードが動作する必要がある場合です。

フレーバーに加えて、他に3つのフラグを設定できます。wxRE_ICASEは大文字小文字を区別しない正規表現にします。デフォルトは大文字と小文字を区別します。wxRE_NOSUBは、正規表現エンジンがすべてのキャプチャグループをキャプチャしないものとして扱います。つまり、置換テキストで後方参照を使用したり、各キャプチャグループによって一致する正規表現の部分を照会したりすることはできません。いずれにしてもこれらを使用しない場合は、wxRE_NOSUBフラグを設定するとパフォーマンスが向上します。

Tclセクションで説明したように、Henry Spencerの「ARE」正規表現エンジンは、混乱を招く「単一行」(?s)および「複数行」(?m)マッチングモードを廃止し、同様に混乱を招く「改行非依存」(?s)、「部分改行依存」(?p)、「逆部分改行依存」(?w)、および「改行依存マッチング」(?n)に置き換えられました。 wxRegExクラスはAREエンジンをカプセル化しているため、正規表現内でモード修飾子を使用すると、4つすべてのモードをサポートします。ただし、flagsパラメータでは2つしか設定できません。

flagsにwxRE_NEWLINEを追加すると、「改行依存マッチング」(?n)が有効になります。このモードでは、ドットは改行文字(\ n)と一致しません。キャレットとドル記号は、文字列の先頭と末尾だけでなく、文字列内の改行の前後にも一致します。

wxRE_NEWLINEフラグを設定しないと、デフォルトは「改行非依存」(?s)になります。このモードでは、ドットは改行文字(\ n)を含むすべての文字と一致します。キャレットとドル記号は、対象文字列の先頭と末尾のみに一致します。このデフォルトは、Perlや地球上の他のすべての正規表現エンジンのデフォルトとは異なることに注意してください。Perlでは、デフォルトでは、ドットは改行文字と一致せず、キャレットとドル記号は対象文字列の先頭と末尾のみに一致します。wxWidgetsでこのモードを設定する唯一の方法は、(?p)を正規表現の先頭に配置することです。

すべてをまとめると、wxRegex(_T("(?p)^[a-z].*$"), wxRE_ADVANCED + wxRE_ICASE)は、対象文字列が文字で始まる単一行で構成されているかどうかを確認します。Perlでの同等のものはm/^[a-z].*$/i.

です。 wxRegExステータス関数

wxRegEx::IsValid()は、wxRegExオブジェクトがコンパイルされた正規表現を保持している場合にtrueを返します。

wxRegEx::GetMatchCount()という名前はあまり適切ではありません。 Matches()によって見つかった一致の数を返しません。実際、を呼び出す前に、Compile()の直後にGetMatchCount()を呼び出すことができます。正規表現内のキャプチャグループの数に、全体の正規表現一致のための1つを加えた数を返します。これを使用して、置換テキストで使用できる後方参照の数と、GetMatch(). Compile()に渡すことができる最大のインデックスを決定できます。正規表現にキャプチャグループがない場合、は1を返します。その場合、は、置換テキストで使用できる唯一の有効な後方参照です。Compile()エラーが発生した場合、\0は0を返します。これは、wxRegExオブジェクトがコンパイルされた正規表現を保持していない場合、またはwxRE_NOSUBでコンパイルした場合に発生します。

Compile()一致の検索と抽出

正規表現が文字列と一致するかどうかをテストしたり、正規表現によって一致した部分文字列を抽出したりするには、最初に

wxRegEx::Matches()メソッドを呼び出す必要があります。3つのバリアントがあり、対象文字列としてwxCharまたはwxStringを渡すことができます。wxCharを使用する場合、3番目のパラメータとして長さを指定できます。指定しない場合、wxStrLen()が呼び出されて長さが計算されます。文字列内のすべての正規表現一致をループする場合は、ループの外側でwxStrLen()を自分で呼び出し、結果をwxRegEx::Matches()に渡す必要があります。bool wxRegEx::Matches(const wxChar* text, int flags = 0) const

bool wxRegEx::Matches(const wxChar* text, int flags, size_t len) const
bool wxRegEx::Matches(const wxString& text, int flags = 0) const
Matches()は、正規表現が

textパラメータで渡した対象文字列の全部または一部と一致する場合にtrueを返します。正規表現が対象文字列全体と一致するかどうかを設定するには、正規表現にアンカーを追加します。

パラメータとflagsメソッドまたはGetMatchCount()コンストラクタに渡すパラメータを混同しないでください。すべてのフレーバーとマッチングモードオプションは、正規表現のコンパイル時にのみ設定できます。wxRegEx()Matches()メソッドでは、wxRE_NOTBOLとwxRE_NOTEOLの2つのフラグのみが許可されます。wxRE_NOTBOLを設定すると、

および^\Aは文字列の先頭と一致しません。そのマッチングモードを有効にした場合、埋め込まれた改行の後にも一致します。同様に、wxRE_NOTEOLを指定すると、\Z$\Aは文字列の末尾と一致しません。wxRE_NOTBOLは、一般的に「次を検索」ルーチンを実装するために使用されます。wxRegExクラスはそのような関数を備えていません。文字列内の2番目の一致を見つけるには、wxRegEx::Matches()を呼び出し、最初の一致の後の元の対象文字列の部分を渡す必要があります。wxRE_NOTBOLフラグを渡して、渡している文字列の先頭を削除したことを示します.wxRE_NOTEOLは、大規模なデータセットを処理していて、データ全体を読み取る前に正規表現を適用する場合に役立ちます。文字列全体を読み取るまでは、wxRegEx::Matches()を呼び出すときにwxRE_NOTEOLを渡します。不完全なデータで「次を検索」を行うときは、wxRE_NOTBOLとwxRE_NOTEOLの両方を渡します。

への呼び出しの後、

がtrueを返し、正規表現をwxRE_NOSUBフラグなしでコンパイルした場合、

を呼び出して、全体の正規表現一致と、正規表現のキャプチャグループによって一致した文字列の部分に関する詳細を取得できます。によって見つかった一致の数を返しません。実際、bool wxRegEx::GetMatch(size_t* start, size_t* len, size_t index = 0) constは1を返します。その場合、は、対象文字列内の一致の開始位置と、一致する文字数を取得します。

wxString wxRegEx::GetMatch(const wxString& text, size_t index = 0) constは、一致したテキストを返します。

どちらの呼び出しでも、indexパラメータをゼロに設定する(または省略する)と、全体の正規表現一致が取得されます。1 <= index < GetMatchCount()に設定すると、正規表現内のキャプチャグループの一致が取得されます。グループの番号を決定するには、正規表現の開き括弧を左から右に数えます。検索と置換

wxRegExクラスは、検索と置換を行うための3つのメソッドを提供します。

Replace()

は、実際に作業を行うメソッドです。ReplaceAll()ReplaceFirst()\Aを使用して、の3番目のパラメータをより読みやすく指定できます。ReplaceAll().

int wxRegEx::ReplaceAll(wxString* text, const wxString& replacement) const内のすべての正規表現一致をパラメータで渡した対象文字列の全部または一部と一致する場合にtrueを返します。正規表現が対象文字列全体と一致するかどうかを設定するには、正規表現にアンカーを追加します。replacementに置き換えます。.

int wxRegEx::ReplaceFirst(wxString* text, const wxString& replacement) const内の正規表現の最初の一致をパラメータで渡した対象文字列の全部または一部と一致する場合にtrueを返します。正規表現が対象文字列全体と一致するかどうかを設定するには、正規表現にアンカーを追加します。replacementに置き換えます。.

に置き換えます。int wxRegEx::Replace(wxString* text, const wxString& replacement, size_t maxMatches = 0) constでは、置換を行う回数を指定できます。maxMatches

に0を渡すと、または省略すると、ReplaceFirst()と同じ動作になります。1 に設定すると、を使用して、と同じ動作になります。1 より大きい数値を渡すと、最初の maxMatches 件の一致のみが置換されます。もしパラメータで渡した対象文字列の全部または一部と一致する場合にtrueを返します。正規表現が対象文字列全体と一致するかどうかを設定するには、正規表現にアンカーを追加します。に指定した数より少ない一致が含まれている場合、エラーを発生させることなく、すべての一致が置換されます。

これら 3 つの呼び出しはすべて、実際に行われた置換の数を返します。正規表現が対象テキストと一致しなかった場合はゼロを返します。戻り値 -1 はエラーを示します。置換は、最初のパラメーターとして渡す wxString に直接行われます。

wxWidgets は、置換テキストに Tcl と同じ構文を使用します。\0は正規表現全体の一致に対するプレースホルダーとして、\1から\9までは、最初の 9 つの キャプチャグループ のいずれかによって一致したテキストを表すために使用できます。&\0の同義語として使用することもできます。アンパサンドの前にバックスラッシュがないことに注意してください。&は正規表現全体の一致に置き換えられますが、\&はリテラルのアンパサンドに置き換えられます。\\を使用して、リテラルのバックスラッシュを挿入します。バックスラッシュは、数字が後に続く場合にのみエスケープする必要があります。これは、組み合わせが後方参照と見なされないようにするためです。C++ コードで置換テキストをリテラル文字列として指定する場合、C++ コンパイラもバックスラッシュをエスケープ文字として扱うため、すべてのバックスラッシュを 2 つ重ねる必要があります。そのため、一致を最初の後方参照とそれに続くテキスト&coで置き換えたい場合は、C++ で_T("\\1\\&co").

| クイックスタート | チュートリアル | ツールと言語 |  | リファレンス | 書籍レビュー |

| grep | PowerGREP | RegexBuddy | RegexMagic |

| EditPad Lite | EditPad Pro |

| Boost | Delphi | GNU (Linux) | Groovy | Java | JavaScript | .NET | PCRE (C/C++) | PCRE2 (C/C++) | Perl | PHP | POSIX | PowerShell | Python | R | Ruby | std::regex | Tcl | VBScript | Visual Basic 6 | wxWidgets | XML Schema | Xojo | XQuery & XPath | XRegExp |

| MySQL | Oracle | PostgreSQL |