1 に答える
アトミックグループに続く+
数量詞は、正規表現エンジンがグループ内のパターンを1回以上一致させようとすることを意味します。これは、エンジンがパターンを1回だけ一致させようとする2番目の式とは異なります。
の+
後にレイジー修飾子が続かない?
ため、貪欲に、つまり可能な限り何度も一致します。
グループ化はおそらくアトミックになりました。これは、グループを非キャプチャ化するだけでなく、サブ式全体が完全に一致するたびにバックトラックを防ぐためです。
グループの最後にあるが改行と一致しない場合、または一度\n*
失敗すると+
、エンジンが最初からグループとの一致を再試行し始めます。そうしない場合、グループはアトミックであるため、既存の一致が返されます。
グループがアトミックでない場合、エンジンは、グループの開始を再度照合する前に、正常に照合されたものと照合する別の方法を試行するためにバックトラックします。
たとえば、一致した最後の3文字が改行である場合、\n*
最初に最後の文字を放棄し、グループの先頭との一致を再試行します。それが失敗すると、別の改行が表示されて再試行されます。
バックトラックはシーケンスに続きます。とによって一致するものと、およびによって一致する文字の数(.+\n)*
の両方に柔軟性があるため、エンジンがパターンに一致する前に、非常に多くの方法があります。さらにもう一度一致します。.
+
*
文字列の同じ部分は、さまざまな方法で部分式全体と一致する可能性があるため、エンジンがそれ以上一致できないことを確認する前に、大量の非効率的で時間のかかるバックトラックが発生する可能性があります。
アトミックグループの表記は、これを回避できることを意味します。