1)Atomicグループを使用すると、完全正規表現が指定された文字列と一致していない場合、正規表現エンジンはさらに順列を戻しません。交替を使用するときはいつでも、マッチが成功すると、正規表現は残りの式との一致を直ちに試みますが、他の交替が可能な位置を追跡します。残りの式が一致しない場合、正規表現は以前に指摘された位置に戻り、他の組み合わせを試します。 Atomicグループがを使用していた場合、正規表現エンジンはではなく、は以前の位置を追跡していて、一致を諦めてしまいます。上記の例では、Atomicグループを使用する目的を実際に説明していません。これは、バックトラックの排除を明確に示しています。グリーディー量量子が使用され、交替がないにもかかわらずさらなる組み合わせが可能である特定のシナリオでは、アトムグループが使用されます。
2)原子グループと非捕獲グループは異なります。非キャプチャグループは単にマッチの値を保存しません。アトミックグループは、さらなる組み合わせが必要な場合にバックトラックを無効にするだけです。例えば
、正規表現(マッチを捕捉せず)a(?:bc|b)c
マッチabcc
とabc
両方、a(?>bc|c)c
のみabcc
と一致しながら。正規表現がa(?>b|bc)c
だった場合は、abc
と一致しますが、a(?:b|bc)c
はまだ両方とも一致します。
ありがとうございます!原子団と所有修飾子の違いは何ですか?彼らは同じ目的のためですか? – Tim
所有修飾子は原子の単なる構文上の砂糖です: '(?:a | b)* +'は '(?>(?:a | b)*)'と等価です。 –