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 个字符,它匹配字符串末尾的零长度字符串,并将其替换为x. 然后它停止,因为它已到达字符串的末尾。

于 2013-02-23T06:53:25.840 回答