最近、正規表現で遊んでいますが、phpでpreg_match_allを使用すると、期待どおりに機能しないことが1つあります。
http://www.solmetra.com/scripts/regex/index.phpでオンライン正規表現ツールを使用しています。
私が使用している正規表現はです/(?>x|y|z)w/。私はそれを一致させていabyxwます。失敗することを期待していますが、成功し、一致しxwます。
アトミックグループ化を使用しているため、失敗することが予想されます。アトミックグループ化は、複数のソースから読み取ったものから、バックトラックを防ぎます。私が正確に期待しているのは、エンジンyがオルタネーションとのマッチングを試みて成功することです。後でw、正規表現リテラルwとの照合を試みて失敗します。これは、に遭遇したためxです。その後、通常はバックトラックしますが、アトミックグループ化のため、この場合はバックトラックしないでください。だから私が知っていることから、それはyこの原子グループと一致しようとし続けるべきです。しかし、そうではありません。
この状況に光を当てていただければ幸いです。:)