为什么preg_replace与/(.*)/重复部分字符串?

mat*_*b33 14 php regex preg-replace

为什么以下代码:

<?php echo preg_replace("/(.*)/", "$1.def", "abc");
Run Code Online (Sandbox Code Playgroud)

输出abc.def.def而不是abc.def

我很想知道重复发生的原因.

使用/(.+)//^(.*)$/按预期工作,但我不是在寻找解决方案,只是问一个问题(虽然这些模式可能与答案有关).

在这里修改现场版.

ken*_*ytm 8

因为.*匹配字符串末尾的空子字符串.这意味着字符串有两个匹配项abc:

  1. 整串abcabc.def
  2. 空字符串→ .def

这给了abc.def.def.


编辑:在正则表达式中使用贪婪量词的String.replaceAll()异常中解释了它发生原因的详细信息.

  • @Eric:`"a".replace(/.*/ g,"b")`. (2认同)