失敗したマッチはキャプチャされたグループ変数をリセットしないようです
そこに失敗した一致はありません。あなたの正規表現は文字列とうまく一致します。いくつかの繰り返しで、内部グループの一致に失敗することがいくつかありますが。一致した各グループは、その特定のグループで見つかった次の一致によって上書きされるか、そのグループが現在の繰り返しで一致しない場合、以前の一致の値を保持する可能性があります。
正規表現の一致がどのように進行するか見てみましょう:
最初(a+)?(b+)?(c)
の一致aac
。はオプションであるため(b+)?
、一致しません。この段階で、各キャプチャ グループには次の部分が含まれます。
$1
マッチ全体を含む -aac
$2
一部を含む(a+)?
-aa
$3
(b+)?
の部分が含まれていますnull
。
$4
一部を含む(c)
-c
一致する文字列がまだ残っているため - bbbcac
。さらに進む -(a+)?(b+)?(c)
マッチ - bbbc
. はオプションであるため(a+)?
、一致しません。
$1
一致全体が含まれます - bbbc
。以前の値を上書きします$1
$2
一致しません。したがって、以前に一致したテキストが含まれます-aa
$3
今回はマッチ。を含む -bbb
$4
マッチc
繰り返し(a+)?(b+)?(c)
ますが、最後の部分に一致します - ac
。
$1
一致全体が含まれます - ac
。
$2
a
今回はマッチ。の以前の値を上書きします$2
。それは今含まれています -a
$3
今回は(b+)?
パーツがないので一致しません。前の試合と同じになります -bbb
$4
一致しc
ます。前の一致の値を上書きします。現在は - が含まれていますc
。
これで、文字列には一致するものは何も残っていません。すべてのキャプチャ グループの最終的な値は次のとおりです。