マッチが成功する場合、速く動作します。これをaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaに適用すると、マッチが失敗するまでに長い時間がかかります。文字列を分割する方法が多くあり、それらすべてに対しマッチを試みる必要があるためです。最適化が行われるためです。文字列にその文字が無い場合、早期に失敗と判定します。このパターンを次のように変更した場合、((?>\D+)|<\d+>)*[!?]非数字の並びを分割することがなくなるので、より速く失敗するようになります。条件付きサブパターンサブパターンを条件付きでマッチング処理させることが可能です。つの選択肢を選択させます。(?(条件)真パターン)(?(条件)真パターン|偽パターン)条件が満たされた場合、真パターンが使われます。(もしあれば)偽パターンが使われます。コンパイル時にエラーになります。その番号のキャプチャ用サブパターンがマッチしている場合に条件が真となります。以上でないといけません。次のパターンを見てみましょう。つの部分に分割されています。)最初の部分は、オプションで、開きカッコにマッチします。部分は、カッコでない一つ以上の文字にマッチします。最初のカッコがマッチしたかどうかをテストする条件付きサブパターンです。真パターンが実行され、閉じカッコが必要となります。サブパターンは何にもマッチしません。オプションでカッコで囲まれた並びにもマッチします。数値の他にも、条件として言明が使用できます。いずれも使え、肯定の言明も否定の言明も使用できます。次のパターンを見てみましょう。)条件は、肯定の先読み言明であり、英字以外の文字の並びの後に英字が続くものにマッチします。言いかえると、対象文字列に少なくとも英字が一つあるかどうかが調べられます。英字がみつかると、最初の選択肢に対して検索対象とのマッチングが行われます。みつからない場合は、2番目の選択肢に対してマッチングが行われます。どちらかの文字列にマッチします。いう並びにより始まり、次の閉じカッコで終わります。カッコのネストはできません。コメント内の文字は、パターンマッチには全く関係しません。文字からもコメントが始まり、次の改行文字で終わります。再帰的パターンどうすればカッコに括られた文字列とマッチできるか、という問題を考えて見ましょう。カッコは何回でもネストできるとします。再帰が使えないとすると、パターンを用いて、せいぜい、ある一定の深さのネストまでしかマッチできないでしょう。任意の深さのネストを処理することは不可能です。正規表現において再帰を行う実験的な機能が導入されています。コードを正規表現中に挿入することで、これを実現しています。コードは以下のようになります。コードが実行時に挿入されます。パターンが再帰的に適用されています。挿入をサポートできません。オプションが設定され空白文字が無視されると仮定)。\)まず、このパターンは開きカッコにマッチします。部分文字列に何回でもマッチします。最後に閉じカッコにマッチします。このパターンを次の文字列に適用すると、(aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa()「マッチしない」という判定が速やかに行われます。そのすべてが確認された後にマッチの失敗が報告されるため、マッチに非常に時間がかかります。後の再帰レベルからのものになります。あり、最上位レベルの最後の値です。なり、最上位レベルのカッコの中身となります。データ保存用に追加の記憶領域を確保する必要があります。ついてのみデータを保存します。パフォーマンスパターンに記述可能な要素のうち、幾つかの要素は、他の要素よりも効率的に処理されます。ような文字クラスの方が効率的です。一般に、構文が最も単純なものが、たいてい最も効率が良くなります。正規表現の性能を向上させる最適化について様々な検討が行われています。固定パターンとみなします。この最適化を行うことができません。second"(ここで、は改行文字を意味します)にマッチさせます。対象文字列の各改行文字の後からマッチを繰り返し行う必要があります。最高の性能が得られます。マッチが再び始められることを防止します。制限のない繰り返しをネストするようなパターンについては注意が必要です。実行に長い時間を要します。次のパターンを考えてみましょう。3文字の組合せとかを意味する〕。非常に長い時間がかかります。次のように単一の文字リテラルが最後にある場合には最適化が行われます。あるかどうかを調べます。無い場合には、直ちにマッチは失敗します。この最適化は行われません。以下のパターンと上に挙げたパターンの動作を比較してみましょう。文字だけが連続する行に適用した場合、前者のパターンでは、ほぼ瞬間的に失敗と判定されます。文字を超えると、かなりの時間がかかります。このサポートは、不完全であり、実験的なものです。コールする必要があります。文字列であるとして処理されます。以下に示す制限があります。フラグを何箇所かでチェックするだけであり、それほどは大きくありません。コードであると見なします。正当であるかどうかの確認はしません。動作に以下の変化があります。文字であると解釈されます。