2
var_dump(
  preg_replace('/.?$/s', "x", 'abc'),
  preg_replace('/.$/s',  "x", 'abc')
);

出力:

string(4) "abxx" <-- strange, isn't it?
string(3) "abx"

どうしてそれが可能ですか?

4

1 に答える 1

1

preg_replace文字列内のすべての一致を置き換えます。そのため、各置換を行った後、前の置換を行った場所の後から始まる別の一致を検索します。

したがって、最初にを探して/.?$/見つけc、それを に置き換えてx、結果は になりabxます。次に、/.?$/の直後の開始を再度検索しxます。.?は 0 または 1 文字に一致することを意味するため、文字列の末尾にある長さ 0 の文字列に一致し、それを に置き換えますx。その後、文字列の最後に到達したため停止します。

于 2013-02-23T06:53:25.840 に答える