preg_replace使用非常简单的RegEx生成意外的重复

时间:2013-02-23 06:29:37

标签: php regex preg-replace

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

输出:

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

怎么可能?

1 个答案:

答案 0 :(得分:1)

preg_replace替换字符串中的所有匹配项。因此,在完成每次替换后,它会在之前替换的位置之后搜索另一场比赛。

首先查找/.?$/并找到c,然后将其替换为x,结果为abx。然后,它再次查看/.?$/之后的x。由于.?表示匹配0或1个字符,因此它匹配字符串末尾的零长度字符串,并将其替换为x。然后它停止,因为它已到达字符串的末尾。