2011-07-04 21 views
5

ちょっと戻って私はthis questionに答えましたが、まだ私の答えがどうなったのか分かりませんでした。なぜ(?!^)は(?<!^)と同等ですか?

何らかの理由で、文字列の先頭の否定的な先読みは、負のlookbehindと同じように動作します。例えば

、PHP

preg_replace("/(?!^)12/", "ab", "12345"); // 12345 
preg_replace("/(?<!^)12/", "ab", "12345"); // 12345 
preg_replace("/(?!1)23/", "ab", "12345"); // 1ab45 
preg_replace("/(?<!1)23/", "ab", "12345"); // 12345 

に私はそれが今まで尋ね最も有用な問題ではないと知っているが、これは数週間のカップルのために私をしつこいされています。

答えて

8

キャレットはゼロ幅のアサーションです。実際、先読みと見た目のヒントはゼロ幅です。したがって、この場合は、前方または後方を見ているかどうかは関係ありませんが、あなたはまだ同じ文字の位置を見ています。

これは、this articleでかなり説明されています。

+0

ありがとう、そんなことは意味をなさないが、私はそれを沈めるために夜の休息が必要だと思う。 –

関連する問題