var_dump(
preg_replace('/.?$/s', "x", 'abc'),
preg_replace('/.$/s', "x", 'abc')
);
输出:
string(4) "abxx" <-- strange, isn't it?
string(3) "abx"
怎么可能?
答案 0 :(得分:1)
preg_replace
替换字符串中的所有匹配项。因此,在完成每次替换后,它会在之前替换的位置之后搜索另一场比赛。
首先查找/.?$/
并找到c
,然后将其替换为x
,结果为abx
。然后,它再次查看/.?$/
之后的x
。由于.?
表示匹配0或1个字符,因此它匹配字符串末尾的零长度字符串,并将其替换为x
。然后它停止,因为它已到达字符串的末尾。