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